2016-07-28 12 views
0

Ich weiß, wie zitiert unten von herekönnen nicht kombiniert exec und Umleitung in Bash-Skript verstehen

exec exec ist ein Programm in aktuellen Prozess zur Ausführung des aktuellen Programms im aktuellen Prozess ersetzt, ohne einen neuen Prozess Forking . Es ist nicht etwas, das Sie in jedem Skript verwenden würden, das Sie schreiben, aber es ist gelegentlich nützlich.

Ich schaue mir ein Bash-Skript an, das ich nicht genau verstehen kann.

#!/bin/bash 
LOG="log.txt" 
exec &> >(tee -a "$LOG") 
echo Logging output to "$LOG" 

Hier hat exec keinen Programmnamen zum Ausführen. Was heißt das? und es scheint, die Ausführungsausgabe in eine Protokolldatei zu erfassen. Ich würde verstehen, wenn es exec program |& tee log.txt wäre, aber hier kann ich exec &> >(tee -a log.txt) nicht verstehen. warum noch ein > nach &>?
Was bedeutet die Linie? (Ich weiß, eine Option ist zum Anhängen und &> ist zum Umleiten einschließlich stderr)

EDIT: nachdem ich die Lösung ausgewählt habe, fand ich die exec &> >(tee -a "$LOG") funktioniert, wenn es Bash Shell (nicht SH) ist. Also habe ich die ursprüngliche #!/bin/sh zu #!/bin/bash geändert. Aber exec &>> "$LOG" funktioniert sowohl für bash und sh.

+0

Ist in Ihrem System die Bash-Handbuchseite installiert? Starten Sie es und suchen Sie nach "exec" (exec gefolgt von einem Leerzeichen). – Jens

Antwort

3

Von man bash:

exec [-cl] [-a name] [Befehl [Argumente]]

Wenn Befehl nicht angegeben wird, werden alle Umleitungen wirksam in der aktuellen Shell, [ ...]

Und der Rest:

&>  # redirects stdout and stderr 
>(cmd) # redirects to a process 

Siehe process substitution.

+0

Können Sie das im Zusammenhang mit dem Beispiel erklären? – sjsam

+0

Sie leiten die Ausgabe der aktuellen Shell um. –

+0

Danke. Schöne Erklärung. – sjsam

Verwandte Themen