it-swarm.com.de

Was macht $ (Befehl) &?

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ührt, aber ich habe ihn noch nie in Kombination mit dem Dollarzeichen und den Klammern um den Befehl gesehen.

Was tut es?

8
AlphaOmega

Kurze Antwort

Bei der gegebenen Syntax $(command) & ist das Ergebnis das gleiche, als hätten Sie die Ausgabe von "running just command" genommen und dann versucht, "that" als Befehl auszuführen. Und all dies würde im Hintergrund erfolgen, was bedeutet, dass keine sichtbare Ausgabe vorhanden ist oder im Terminal hängt.

Wenn wir zum Beispiel eine Textdatei namens mycommand.txt mit dem Inhalt hätten:

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, wird von diesem Befehl keine Ausgabe angezeigt, sodass es in diesem Beispiel ziemlich nutzlos wäre.


Lange Antwort (Erklärung)

Dollarzeichen $ (Variable)

Das Dollarzeichen vor dem Ding in Klammern bezieht sich normalerweise auf eine Variable. Dies bedeutet, dass dieser Befehl entweder ein Argument von 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 nennen Sie es mit ein Dollarzeichen. 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 Word-Aufteilung entfernt werden. Die Befehlsersetzung $(cat file) kann durch die entsprechende, aber schnellere $(< file) ersetzt werden.

Et-Zeichen & - Hintergrundprozess

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

16
Owen Hines

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

2
thom