Wie kann ich ein Skript ausführen, ohne das Terminal zu schließen?

69

Ich habe ein Skript in der Datei bla.shund es ist ausführbar. Wenn ich darauf klicke , wird das Skript ausgeführt und das Fenster geschlossen. Ich möchte, dass das Fenster offen bleibt .

So etwas wie ein Befehl cmd /k** commandin Windows.

PS Ich möchte nicht verwenden pause, aber ich möchte in der Lage sein, mehr Befehle zu schreiben, nachdem das Skript ausgeführt wurde.

UAdapter
quelle

Antworten:

81

Fügen Sie $SHELLam Ende Ihres Skripts Folgendes ein:

Alt-Text

Ein kleiner Fehler: Da gnome-terminaldie bashas its Shell nicht ausgeführt wird, wird sie als Anwendung betrachtet und es wird eine Warnung angezeigt , wenn Sie versuchen, das Terminal zu schließen:

There is still a process running in this terminal
Closing the terminal will kill it.

Ich habe keine gute Möglichkeit gefunden, diese Warnung zu verbergen. Wenn Sie möchten, können Sie es vollständig deaktivieren, indem Sie Folgendes ausführen:

gconftool --set /apps/gnome-terminal/global/confirm_window_close --type boolean false

Dies passiert nicht, wenn Sie xtermanstelle von gnome-terminal verwenden. sollte es dich stören

Stefano Palazzo
quelle
20
Sie können exec $SHELLstatt nur verwenden $SHELL, um die Warnung auszublenden, ohne die Einstellungen zu ändern.
Andrea Corbellini
1
Diese Lösung schafft jedoch eine zusätzliche Shell / einen zusätzlichen Prozess. Kann das vermieden werden?
Lucasvc
Ich kenne keinen Weg, dies zu tun, nein. Das Problem besteht darin, dass Sie nach Abschluss des ersten Bash-Vorgangs Ihr Handle auf Standard-E / A verlieren, sodass Sie mit einem Daemon, der diese Handles weitergibt, einige Tricks ausführen müssen, die dann fehleranfälliger und ärgerlicher sind.
Stefano Palazzo
10

Gnome Terminal verwenden

Verwenden Sie das Anhängen von gnome-terminal. Bash am Ende der Befehlszeichenfolge und Aufrufen des Skripts mit der Option -c funktioniert. Zum Beispiel:

gnome-terminal -e "bash -c ~/script.sh;bash"

Dies bewirkt Folgendes:

  1. öffnet gnome-terminal
  2. führt das Skript script.sh aus
  3. Zeigt die Bash-Eingabeaufforderung an, nachdem das Skript beendet wurde.

Sie können das Gnome-Terminal-Fenster verlassen, indem Sie das Fenster schließen oder an der Bash-Eingabeaufforderung exit eingeben. Oder Sie können nach Bedarf weitere Befehle eingeben.

Karsvo
quelle
7

Wenn Sie verwenden, xtermverwenden Sie -hold.

Ramy
quelle
7

Wenn Sie Zugriff auf das Skript haben, können Sie am Ende auch den folgenden Code hinzufügen:

read

Dieser Code wartet vor dem Schließen auf eine Eingabe, sodass das Terminal geöffnet bleibt, bis Sie die Eingabetaste drücken.

Jaycode
quelle
1
Ich benutze oft basham Ende, aber readerlaubt mir, das Fenster nur mit ctrl+coder enter, statt ctrl+shift+woder zu schließen alt+f4. Dies ist praktisch, wenn Sie in Ihrem Skript schnell iterieren.
hsandt
5

Verwenden Sie bashdie --init-fileOption mit einer temporären Pipe:

bash --init-file <(echo './<script_name>')

Ex:

bash --init-file <(echo './bla.sh')
Prem Anand
quelle
2

Das Verwenden xtermund Anhängen ;basham Ende der Befehlszeichenfolge funktioniert. Zum Beispiel:

xterm -e "bash ~/script.sh;bash"

Dies bewirkt Folgendes:

  1. öffnet xterm
  2. Führt das Skript aus script.sh
  3. Zeigt die Bash-Eingabeaufforderung an, nachdem das Skript beendet wurde.

Sie können das xterm-Fenster verlassen, indem Sie das Fenster schließen oder exitan der Bash-Eingabeaufforderung Folgendes eingeben. Oder Sie können nach Bedarf weitere Befehle eingeben.

Karsvo
quelle
1
xterm -e bash --rcfile bla.sh

Dadurch wird das Skript in einem neuen Fenster ausgeführt und Sie können sogar das Fenster steuern, nachdem es fertig ist.

Das neue Fenster wird jedoch nicht ~/.bashrcwie gewohnt geladen , da wir bla.shstattdessen ausgeführt haben. Dies kann durch Putten behoben werden

. ~/.bashrc

oben bla.sh

Steven Penny
quelle