![Wie kann ich einen Befehl ausführen und das Terminal sofort beenden?](https://rvso.com/image/1413931/Wie%20kann%20ich%20einen%20Befehl%20ausf%C3%BChren%20und%20das%20Terminal%20sofort%20beenden%3F.png)
Es sollte ziemlich klar sein, was ich versuche:
ursprüngliches Skript.sh:
select blah in foo bar oof rab
do
cmd $blah
break
done
Ziemlich grundlegendes Zeug. Das Problem tritt auf, wenn ich Folgendes versuche:
> xterm -e 'script.sh'
script.sh funktioniert einwandfrei, wenn es von einer Shell aufgerufen wird. Aber wenn ich versuche, es von fvwm aus aufzurufen, sehe ich keine Ergebnisse von " cmd $blah
". Der Versuch mit der folgenden Änderung bringt mir nichts:
select blah in foo bar oof rab
do
nohup cmd $blah > /dev/null 2>&1 &
break
done
Wie kann ich die gewünschte Funktionalität erreichen? (Das heißt, wie kann ich dafür sorgen, dass ein Xterm lange genug angezeigt wird, damit ich eine Auswahl treffen kann, und sich dann selbst beendet, während im Hintergrund ein Befehl ausgeführt wird?)
Antwort1
Sie können als allerletzte Zeile Ihres Skripts Folgendes hinzufügen:warte PIDAnweisung mit PID
dem Hintergrundbefehl, an dem Sie interessiert sind, wird es beendet. Natürlich müssen Sie das PID
in Ihrem Skript speichern.
#!/bin/bash
# do first stuff...
select blah in foo bar oof rab
do
cmd $blah &
PID_TO_WAIT_FOR=$! # here you store the PID of the last command
break
done
# do other stuff
wait $PID_TO_WAIT_FOR
Anmerkungen:
- „wait“ ist ein in die Shell integrierter Befehl.Es wartet, bis jeder angegebene Prozess abgeschlossen ist, und gibt seinen Beendigungsstatus zurück. Sie können sich hierauf beziehenhelfen.
Antwort2
Ist es für Sie in Ordnung, wenn Sie es in einer neuen xterm
Sitzung ausführen und dann Ihr aktuelles Terminal verlassen? Das neue sollte dann weiterhin funktionieren.
xterm -e "bash -c \"./script.sh; exec bash\"" &
BEARBEITEN:
Mit dem folgenden Ansatz können Sie ein Skript über die GUI im Terminal ausführen, den auszuführenden Befehl auswählen, das Terminal verlassen und den Befehl weiterhin ausführen lassen. Als Beispiel habe ich einige Befehle in commandscript.sh eingefügt.
selectscript.sh:
#!/bin/bash
# Bash Menu Script Example
PS3='Please enter your choice: '
options=("Option 1" "Option 2" "Option 3" "Quit")
select opt in "${options[@]}"
do
case $opt in
"Option 1")
echo "you chose choice 1"
;;
"Option 2")
echo "you chose choice 2 HEXDUMP"
nohup bash commandscript.sh
;;
"Option 3")
echo "you chose choice 3"
;;
"Quit")
break
;;
*) echo invalid option;;
esac
done
Befehlsskript.sh:
#!/bin/bash
exec hexdump /dev/urandom | grep --line-buffered -i "ffff f" > random &