2016-11-01 4 views
1

ich folgendes in einem Bash-Skript bin mit:Wie führe ich einen Befehl in bash aus, der die Ausgabe erfasst und wartet, bis der Befehl beendet ist?

command >> /var/log/somelog.log 2>&1&

Der Grund, warum ich das tue, weil ich alle Ausgaben in /var/log/somelog.log erfassen möchten.

Das funktioniert gut. Jedoch es wartet nicht, bis der Befehl beendet ist. Das bringt mich zur Frage, wie kann ich alle Ausgaben von command in /var/log/somelog.logund erfassen nicht das Bash-Skript fortsetzen, bevor command fertig ist?

Antwort

0

Legen Sie den Befehl nicht in den Hintergrund.

Das letzte & Zeichen bedeutet "führen Sie diesen Befehl im Hintergrund aus, während Sie mir sofort eine neue Shell-Eingabeaufforderung geben."

Nehmen Sie das letzte Zeichen aus dem Befehl, und der Befehl wird im Vordergrund ausgeführt, bis er beendet ist.

Das ist ehrlich gesagt ziemlich einleitende Sachen. Haben Sie darüber nachgedacht, eine Dokumentation zur Verwendung der Shell zu lesen?

+0

Aha, ja, du hast Recht, zweimal. Ich habe es falsch verstanden. Trotzdem danke. –

1

Lassen Sie einfach das endgültige kaufmännische Und &, z.

command >> /var/log/somelog.log 2>&1 

Von Bash - Lists of Commands

Wenn ein Befehl von dem Steueroperator beendet wird ‚&‘, führt das Shell den Befehl asynchron in einem Subshell. Dies wird als Ausführung des Befehls im Hintergrund bezeichnet. Die Shell wartet nicht auf die Beendigung des Befehls, und der Rückkehrstatus ist 0 (wahr).

Verwandte Themen