Ich habe den Fehler erhalten:
Bash: Syntaxfehler in der Nähe von unerwartetem Token ";"
aufgrund des folgenden Befehls:
evince foo.pdf bar.pdf &; emacs foo.tex &
Ist es illegal, Befehle mit zu trennen, ;
wenn &
ein Job im Hintergrund ausgeführt wird? Oder gibt es einen anderen Grund, warum dies nicht funktioniert hat?
Vielen Dank.
if [ $(ps -ef |grep -c '[p]grep') -eq 0 ]; then nohup sleep 5 > /dev/null 2>&1</dev/null & fi
Übrigens ist das Kernproblem, dass (von Borowski abgeleitete) Shells keine leeren Befehle zulassen.
";" und "&" sind Befehlsabschlüsse, die fg bzw. bg bedeuten. So "; ;" (oder ";" am Anfang einer Zeile) ist ebenfalls ungültig.
(Newline (s) implizieren ";", wenn es einen noch nicht abgeschlossenen Befehl gibt, es sei denn, Sie setzen die Zeile mit "\" fort.)
Die Sprachen variieren stark in Bezug auf diese Richtlinien:
C-abgeleitete Sprachen erlauben leere Anweisungen.
Pascal und PERL haben Trennzeichen, keine Abschlusszeichen.
quelle
Nein, es ist nur verwirrt und kann nicht genau sagen, was Sie meinen.
Sie müssen das & mit dem Befehl gruppieren, den Sie in den Hintergrund stellen möchten:
Das funktioniert gut. Noch expliziter wäre:
Vor allem, wenn Sie dann auch nach dem Ende weitere Befehle verketten wollten.
quelle