Nicht blockierender Bash-Befehl

11

Angenommen, ich habe ein Bash-Skript mit folgendem Inhalt:

#!/bin/sh
gedit
rm *.temp

Wenn ich es mit ausführe sh ./test.sh, wird ein geditPopup-Fenster angezeigt, das rmTeil wird jedoch erst ausgeführt, nachdem ich es geschlossen habe gedit.

Ich möchte, dass das Skript auch dann weiter ausgeführt wird, wenn gedites nicht geschlossen ist. als ob das geditdie Bash-Ausführung nicht blockiert.

Das Beispiel, das ich gegeben habe, ist nur ein Beispiel (das rmerste zu setzen funktioniert in einer realen Situation nicht).

Plante
quelle

Antworten:

25

Der Begriff, den Sie suchen, wird als "Hintergrund" eines Jobs bezeichnet. Wenn Sie einen Befehl entweder in Ihrer Shell oder in einem Skript ausführen, können Sie am Ende ein Flag hinzufügen, um ihn in den Hintergrund zu senden und neue Befehle oder den Rest des Skripts auszuführen. In den meisten Muscheln einschließlich shist dies der &Charakter.

#!/bin/sh
gedit &
rm ./*.temp

Auf diese Weise wartet die Shell nicht auf die Beendigung von geditund beiden rmund geditwird gleichzeitig ausgeführt.

Der Begriff "Blockieren" hat normalerweise mit Eingabe- / Ausgabestreams zu tun, häufig mit Dateien oder einem Gerät. Es wird auch in kompilierten Sprachen verwendet, ähnlich wie Sie es verwendet haben, aber in Bash- und ähnlichen Shell-Skripten ist die Terminologie (und Funktion!) Etwas anders.

Caleb
quelle
Vielen Dank! das erklärt, warum ich nur FIFO bekam und Ergebnisse auf Google eingab: D
Plante
Mein Eindruck ist, dass Plante ein Skript von außen beeinflussen, jede Operation im Hintergrund ausführen und das Skript nicht neu schreiben möchte.
Benutzer unbekannt
@user: Ich brauchte ein paar Lesungen, um zu erraten, was er wollte. Vielleicht könnten Sie die Frage zur Klärung kommentieren.
Caleb
Genau das brauchte ich, nochmals vielen Dank. funktioniert soweit super!
Plante