Öffnen Sie das Gnome-Terminal programmgesteuert und führen Sie Befehle aus, nachdem bashrc ausgeführt wurde

Öffnen Sie das Gnome-Terminal programmgesteuert und führen Sie Befehle aus, nachdem bashrc ausgeführt wurde

Zum Starten meiner Entwicklungsumgebung habe ich ein kleines Skript geschrieben. Ein Teil davon ist, ein Gnome-Terminal mit mehreren Tabs zu öffnen, in denen automatisch einige Befehle ausgeführt werden sollen. Einige dieser Befehle hängen von einer bereits ausgeführten .bashrc ab. Aber bei Verwendung

gnome-terminal --tab -e "Befehl" --tab --tab

der Befehl wird ausgeführt, bevor .bashrc ausgeführt wurde. Gibt es eine Möglichkeit, ein automatisiertes Gnome-Terminal -e so zu konfigurieren, dass es sich wie ein manuell verwendetes verhält? (selbst Befehle wie „cd /foo/bar“ funktionieren nicht mit Gnome-Terminal -e)

Antwort1

Sobald Gnome-Terminal Bash gestartet hat, ist es, was die Befehlsausführung betrifft, aus der Schleife raus: Es verwaltet nur die Eingabe und Ausgabe. Sie benötigen also die Zusammenarbeit von Bash, um etwas auszuführen, nachdem es ~/.bashrcgeladen wurde.

Erstens müssen Sie in vielen Fällen nach gar keine Befehle ausführen ~/.bashrc. Das Öffnen eines Terminals in einem bestimmten Verzeichnis kann beispielsweise einfach mit erfolgen cd /foo/bar && gnome-terminal. Sie können Umgebungsvariablen auf ähnliche Weise festlegen: VAR=value gnome-terminal. (Wenn Ihr ~/.bashrcUmgebungsvariablen überschreibt, machen Sie es falsch:Umgebungsvariablendefinitionen gehören in~/.profile)

Um Befehle im Terminal auszuführen, aber vorher ~/.bashrc, können Sie

gnome-terminal -x sh -c 'command1; command2; exec bash'

Wenn Sie mehrere Tabs verwenden möchten, müssen Sie -eanstelle von verwenden -x. Gnome-Terminal teilt das Argument von -ebei Leerzeichen wenig hilfreich auf, anstatt es über eine Shell auszuführen. Sie können dennoch einen Shell-Befehl schreiben, wenn Sie darauf achten, keine Leerzeichen darin einzuschließen. Zumindest mit Gnome-Terminal 2.26 können Sie jedoch Tabs verwenden (ersetzen Sie diese <TAB>durch ein wörtliches Tabulatorzeichen):

gnome-terminal -e 'sh -c command1;command2;exec<TAB>bash'
gnome-terminal --tab -e 'sh -c command1;<TAB>exec<TAB>bash' \
               --tab -e 'sh -c command2;<TAB>exec<TAB>bash'

Wenn Sie nach Befehlen ausführen müssen ~/.bashrc, stellen Sie sicher,EsFühren Sie die Befehle aus. Fügen Sie beispielsweise am Ende von den folgenden Code ein ~/.bashrc:

eval "$BASH_POST_RC"

Führen Sie dann nach (eigentlich am Ende von) Ihrer Bashrc einen Code aus:

gnome-terminal -x sh -c BASH_POST_RC=\''command1; command2'\''; exec bash'

oder (weniger Zitate)

BASH_POST_RC='command1; command2' gnome-terminal

Obwohl ich diese Vorgehensweise nicht unbedingt empfehle, könnten Sie an den in Wie starte ich ein Terminal, wenn in der Befehlszeile bereits ein bestimmter Text eingegeben wurde?.

Antwort2

-eWenn Sie diese Option verwenden, gnome-terminalwird der Befehl ausgeführt, ohne eine neue Shell zu starten (Sie können sogar etwas wie Folgendes ausführen: gnome-terminal -e gedit). Wenn Sie also einen Befehl in der Shell in einem neuen Terminal/Tab ausführen möchten, bashmüssen Sie Folgendes tun:

gnome-terminal -x bash -c "command"

Beachten Sie jedoch, dass beim "command"Ende auch das Terminal/die Registerkarte endet.

verwandte Informationen