Wie kann ich einen Befehl ausführen und das Terminal sofort beenden?

Wie kann ich einen Befehl ausführen und das Terminal sofort beenden?

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 PIDdem Hintergrundbefehl, an dem Sie interessiert sind, wird es beendet. Natürlich müssen Sie das PIDin 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 xtermSitzung 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 &

verwandte Informationen