it-swarm.com.de

Vermeiden, dass Gnome-Terminal nach der Skriptausführung geschlossen wird?

Ich habe ein Bash-Skript erstellt, das mehrere Gnome-Terminals öffnet, über ssh eine Verbindung zu Computern im Klassenraum herstellt und ein Skript ausführt.

Wie kann ich verhindern, dass das Gnome-Terminal nach Abschluss des Skripts geschlossen wird? Beachten Sie, dass ich auch weitere Befehle in das Terminal eingeben kann.

Hier ist ein Beispiel für meinen Code:

gnome-terminal -e "ssh [email protected]<ip> cd /tmp && ls"
59
Marten Bauer

Soweit ich weiß, dass Sie möchten, dass gnome-terminal sich öffnet, lassen Sie einige Befehle ausführen und dann zur Eingabeaufforderung wechseln, damit Sie weitere Befehle eingeben können. Gnome-Terminal ist nicht für diesen Anwendungsfall konzipiert, es gibt jedoch Problemumgehungen:

Lassen Sie gnome-terminal bash ausführen und teilen Sie bash mit, dass Sie Ihre Befehle und dann bash ausführen sollen

$ gnome-terminal -e "bash -c \"echo foo; echo bar; exec bash\""

Der exec bash am Ende ist notwendig, da bash -c beendet wird, sobald die Befehle ausgeführt wurden. exec bewirkt, dass der laufende Prozess durch den neuen Prozess ersetzt wird, andernfalls werden zwei Bash-Prozesse ausgeführt.

Lassen Sie gnome-terminal bash mit einer vorbereiteten rcfile ausführen, die Ihre Befehle ausführt

somercfile vorbereiten:

source ~/.bashrc
echo foo
echo bar

Dann renne:

$ gnome-terminal -e "bash --rcfile somercfile"

Lassen Sie gnome-terminal ein Skript ausführen, das Ihre Befehle ausführt und dann in bash ablegt

scripttobash vorbereiten:

#!/bin/sh
echo foo
echo bar
exec bash

Legen Sie diese Datei als ausführbar fest.

Dann renne:

$ gnome-terminal -e "./scripttobash"

Alternativ können Sie eine genericscripttobash machen:

#!/bin/sh
for command in "[email protected]"; do
  $command
done
exec bash

Dann renne:

$ gnome-terminal -e "./genericscripttobash \"echo foo\" \"echo bar\""

Jede Methode hat ihre Macken. Sie müssen wählen, aber klug wählen. Ich mag die erste Lösung wegen ihrer Ausführlichkeit und der Geradlinigkeit.

Alles in allem könnte dies für Sie von Nutzen sein: http://www.linux.com/archive/feature/151340

83
lesmana

Endlich funktioniert dieser für mich:

gnome-terminal --working-directory=WORK_DIR -x bash -c "COMMAND; bash"
13
  • Stack Overflow answer: Das Terminal wird geschlossen, wenn der darin ausgeführte Befehl beendet ist. Sie müssen also einen Befehl schreiben, der nicht sofort beendet wird. Zum Beispiel, um das Terminalfenster offen zu lassen, bis Sie drücken Enter drin:

    gnome-terminal -e "ssh Host 'cd /tmp && ls'; read line"
    
  • Super User answer: Erstellen Sie ein Profil, in dem die Einstellung "Titel und Befehl/Wenn Befehl beendet wird" auf "Terminal offen halten" gesetzt ist. Rufen Sie gnome-terminal mit der Option --window-with-profile oder --tab-with-profile auf, um den Terminalnamen anzugeben.

11
Gilles

Führen Sie mit -ic statt -i aus, damit das Terminal den bash-Prozess schließt, wenn Sie die Terminal-GUI schließen:

gnome-terminal -e "bash -ic \"echo foo; echo bar; exec bash\""
5
Zini

Die ideale Lösung wäre die Eingabe einer Benutzereingabe mit Echo " Drücken Sie eine beliebige Taste ".

Wenn Sie jedoch in Nautis oder Nemo doppelklicken und "Ausführen" in einem Terminal auswählen, scheint dies nicht zu funktionieren.

Im Fall von Ubuntu / wird eine Shell verwendet, die für ein schnelles Starten und Ausführen mit nur Standardfunktionen entwickelt wurde. Der Name ist Dash, glaube ich. Da der Shebang die erste Zeile ist, die mit enable beginnt korrekte Verwendung der bash-Funktionen . Normalerweise wäre dies: #!/bin/bash oder ähnliches . In Ubuntu habe ich gelernt, dass dies sein sollte: #!/usr/bin/env bash.

Es gibt viele Problemumgehungen, um den Bildschirm festzuhalten, bevor der Interpreter einen Syntaxfehler in einem Bash-Befehl sieht.

Die Lösung in Ubuntu, die für mich funktioniert hat:

#!/usr/bin/env bash

your code

echo Press a key...
read -n1
0
Leo