Was macht $ (Befehl) &?

11

Ich habe die folgende Syntax in einem Bash-Skript gesehen:

 >$(command) &

Ich weiß, dass das kaufmännische Und &am Ende einen Befehl im Hintergrund ausführen lässt, aber ich habe ihn noch nie in Kombination mit dem Dollarzeichen und den Klammern um den Befehl gesehen.

Was tut es?

Alpha Omega
quelle
Ich kenne diese Art der Verwendung von $( ), aber es gibt keine Ruhe. Es ist nur so $(command) &, was mich verwirrt.
AlphaOmega

Antworten:

21

Kurze Antwort

In Anbetracht der Syntax $(command) &ist das Ergebnis dasselbe, als hätten Sie die Ausgabe von "just just" genommen commandund dann versucht , dies als Befehl auszuführen . Und all dies würde im Hintergrund erfolgen, was bedeutet, dass keine sichtbare Ausgabe vorhanden wäre oder im Terminal hängen würde.

Wenn wir zum Beispiel eine Textdatei mycommand.txtmit dem Inhalt hatten:

echo "Hello World"

Dann der Befehl

$(cat mycommand.txt) &

wäre gleichbedeutend mit laufen

echo "Hello World" &

Da wir jedoch das kaufmännische Und ( &) hinzugefügt haben , würden wir keine Ausgabe von diesem Befehl sehen, so dass es in diesem Beispiel ziemlich nutzlos wäre.


Lange Antwort (Erklärung)

Dollarzeichen $(variabel)

Das Dollarzeichen vor dem Ding in Klammern bezieht sich normalerweise auf eine Variable. Dies bedeutet, dass dieser Befehl entweder ein Argument aus einem Bash-Skript an diese Variable übergibt oder den Wert dieser Variablen für etwas abruft. Der Unterschied beim Bash-Scripting zum Aufrufen und Deklarieren von Variablen ist folgender:

Deklarieren Sie eine Variable ohne das Dollarzeichen und rufen Sie sie mit einem Dollarzeichen auf. Zum Beispiel ein Skript, das dies enthält

#!/bin/bash
STR="Hello World!"
echo $STR

Würde dies ausgeben

Hello World!

Klammer ()- Befehlsersetzung

Durch die Befehlsersetzung kann die Ausgabe eines Befehls den Befehl selbst ersetzen. Die Befehlsersetzung erfolgt, wenn ein Befehl wie folgt eingeschlossen ist:

$(command)

oder

`command`

Bash führt die Erweiterung durch, indem der Befehl in einer Subshell-Umgebung ausgeführt und die Befehlsersetzung durch die Standardausgabe des Befehls ersetzt wird, wobei alle nachfolgenden Zeilenumbrüche gelöscht werden. Eingebettete Zeilenumbrüche werden nicht gelöscht, können jedoch während der Wortteilung entfernt werden. Die Befehlsersetzung $(cat file)kann durch die entsprechende ersetzt werden, jedoch schneller $(< file).

Kaufmännisches Und &- Hintergrundprozess

Und dann wird das kaufmännische Und oder &Symbol, wie Sie sagten, verwendet, um es im Hintergrund auszuführen.

Die ungeraden
quelle
2

Es nimmt die Ausgabe von "Befehl" als Befehl und führt diese im Hintergrund aus. Seine funktionale ist vergleichbar mit "eval"

thom
quelle
Es handelt sich um ein Symbol im Terminalfenster, das je nach dem, was Sie versuchen, möglicherweise nicht für die Eingabe durch Sie benötigt wird. Wenn Sie ein Terminal öffnen, sehen Sie es dort sofort.
monkeyman_stones
Ich verstehe nicht Obwohl kurz, beantwortet dies die eigentliche Frage, während die akzeptierte Antwort dies nicht tut.
Mveroone