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 ~/.bashrc
geladen 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 ~/.bashrc
Umgebungsvariablen ü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 -e
anstelle von verwenden -x
. Gnome-Terminal teilt das Argument von -e
bei 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
-e
Wenn Sie diese Option verwenden, gnome-terminal
wird 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, bash
müssen Sie Folgendes tun:
gnome-terminal -x bash -c "command"
Beachten Sie jedoch, dass beim "command"
Ende auch das Terminal/die Registerkarte endet.