Wie ist es möglich, mehrere Befehle mit bash auszuführen und im Hintergrund anzuzeigen?
Beispielsweise:
$ for i in {1..10}; do wait file$i &; done
Warten ist eine benutzerdefinierte Binärdatei.
Im Moment erhalte ich eine Fehlermeldung:
syntax error near unexpected token `;'
beim Ausführen des obigen Befehls.
Nach dem Hintergrund sollten die Befehle parallel ausgeführt werden.
nohup
Ermöglichen, dass Sie einen Befehl im Hintergrund ausführen&
und;
ist beides "Befehlsabschlusszeichen". Sie müssen nicht beide verwenden:for ...; do wait $arg & done
funktioniert.Antworten:
Das
&
ist genau wie;
ein Listenabschlussoperator . Sie haben dieselbe Syntax und können austauschbar verwendet werden (je nachdem, was Sie tun möchten). Das bedeutet, dass Sie nicht nur wollen oder brauchen, sonderncommand1 &; command2
nurcommand1 & command2
.In Ihrem Beispiel könnten Sie also einfach schreiben:
und jeder
wait
Befehl wird im Hintergrund gestartet und die Schleife fährt sofort mit dem nächsten fort.quelle
Verwenden Sie aus Kompatibilitätsgründen die Posix-Form anstelle der Erweiterung:
quelle
seq
kein POSIX-Befehl ist und im Allgemeinen nur auf GNU-Systemen vorkommt. Das Verhalten oder$(...)
(und$i
) hängt vom aktuellen Wert von ab$IFS
. Beachten Sie auch , dass , indem Sie(cmd &)
,cmd
wird ein Kind von einer Subshell sein, so werden Sie nicht in der Lage sein , zu warten und ihren Exit - Status zum Beispiel erhalten.Sie können die Befehle gruppieren und die gruppierten Befehle in den Hintergrund stellen. Mögen :
quelle
Ist Ihre Binärdatei wirklich benannt
wait
? Ich empfehle dies nicht, dawait
es sich um eine eingebaute Shell handelt.Ich glaube, dass bash eine einzeilige Schleife, die Hintergrundprozesse startet, nicht gut parst. Ich empfehle Ihnen, den Code zu ändern:
quelle