Ich möchte mehrere Befehle in Bash ausführen, einige davon aber im Hintergrund ausführen lassen. Am besten lässt sich das anhand des folgenden Befehls erklären, der jedoch nicht funktioniert ...
for@barpc:~> (sleep 30;command1;command2 param ) & ; anotherCommand
Ich denke, man könnte das als zwei Fragen auffassen:
- Wie beendet man das & in einem Befehl?
- Was wäre ein besserer Weg, dies zu erreichen?
Weitere Details, falls wichtig:
- OpenSUSE 13.2
- Gnome-Shell
Antwort1
Du solltest es versuchen
(sleep 5; ls) & echo "Now"
Dies funktioniert wie Sie es wünschen.
Antwort2
Sie müssen lediglich das ;
. entfernen &
, das selbst als Befehlstrennzeichen fungiert, daher ;
ist das Hinzufügen danach ungültig.
(sleep 30; command1; command2 param ) & anotherCommand
(Die Leerzeichen nach Semikolons sind nicht erforderlich. Ich finde es so einfach lesbarer. Dies ist eine der wenigen Stellen, an denen Leerzeichen in der Shell-Syntax optional sind – an den meisten Stellen sind sie entweder erforderlich oder verboten.)
Bessere Vorgehensweisen hängen wirklich davon ab, was Sie genau tun möchten. Um bessere Vorschläge machen zu können, benötigen wir mehr Informationen.