Sobald gnome-terminal bash gestartet hat, ist es aus der Schleife, was die Befehlsausführung betrifft: Es verwaltet nur die Ein- und Ausgabe. Sie benötigen also die Kooperation von bash, um etwas auszuführen, nachdem ~/.bashrc
es geladen wurde.
Erstens müssen Sie in vielen Fällen keine weiteren Befehle ausführen ~/.bashrc
. Zum Beispiel kann das Öffnen eines Terminals in einem bestimmten Verzeichnis einfach mit erfolgen cd /foo/bar && gnome-terminal
. Sie können Umgebungsvariablen in ähnlicher Weise festgelegt: VAR=value gnome-terminal
. (Wenn Sie ~/.bashrc
Umgebungsvariablen überschreiben, machen Sie es falsch: Definitionen von Umgebungsvariablen gehören dazu.~/.profile
)
Befehle im Terminal ausführen, aber vorher ~/.bashrc
können Sie tun
gnome-terminal -x sh -c 'command1; command2; exec bash'
Wenn Sie mehrere Registerkarten verwenden möchten, müssen Sie -e
statt verwenden -x
. Gnome-terminal spaltet das Argument von -e
at Leerzeichen nicht über eine Shell, sondern unbeholfen auf. Sie können jedoch einen Shell-Befehl schreiben, wenn Sie sicherstellen, dass keine Leerzeichen enthalten sind. Zumindest mit Gnome-Terminal 2.26 können Sie jedoch Tabulatoren verwenden ( <TAB>
durch ein literales Tabulatorzeichen ersetzen ):
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 danach Befehle ausführen ~/.bashrc
müssen, müssen Sie die Befehle ausführen. Fügen Sie beispielsweise den folgenden Code am Ende von ein ~/.bashrc
:
eval "$BASH_POST_RC"
Dann, um einen Code nach (wirklich am Ende von) Ihrem BashRC auszuführen:
gnome-terminal -x sh -c BASH_POST_RC=\''command1; command2'\''; exec bash'
oder (weniger schwer zu zitieren)
BASH_POST_RC='command1; command2' gnome-terminal
Obwohl ich dies nicht besonders empfehle, sind Sie möglicherweise an den Techniken interessiert, die unter
So starten Sie ein Terminal mit einem bestimmten Text, der bereits in der Befehlszeile eingegeben wurde. .
gnome-terminal --geometry=198x44 --working-directory=/home/username/Workspace/project_name --tab --title server -e 'zsh -c "export BASH_POST_RC=\"rails server\"; exec zsh"' --tab --title console -e 'zsh -c "export BASH_POST_RC=\"rails console\"; exec zsh"'
gnome-terminal -e
ruft überhaupt keine Shell auf. Wenn Sie ausführengnome-terminal -e 'sleep 9'
, wird der Befehlsleep
mit dem Argument ausgeführt9
, und es ist keine Shell beteiligt. Wenn Sie ausführen ,gnome-terminal -e 'sleep 9;bash'
dann öffnet das Terminal und schließt sofort, dasleep
beschwert sich, dass9;bash
keine gültige Zeitintervall ist. Sie können beobachten, was los iststrace -f -eexecve gnome-terminal -e …
Wenn Sie die
-e
Option verwenden,gnome-terminal
wird der Befehl ausgeführt, ohne eine neue Shell zu starten (Sie können sogar so etwas wie: ausführengnome-terminal -e gedit
). Wenn Sie also einen Befehl in diebash
Shell in einem neuen Terminal / Tab ausführen möchten, müssen Sie Folgendes tun:Beachten Sie jedoch, dass am
"command"
Ende auch das Terminal / der Tab endet.quelle
gnome-terminal -x bash -c "command"
(-e
erwartet ein einziges Argument). Und es ist ziemlich einfach, eine Shell danach auszuführencommand
, zumindest solange Sie einen einzelnen Tab starten - siehe meine Antwort .gnome-terminal -x "bash" -c "command"
arbeitete für mich. Beachten Sie Anführungszeichen für den Wert -x arg.# Option “-x” is deprecated and might be removed in a later version of gnome-terminal.
'-x
und-e
optons veraltet sind ???~/.bashrc
bevor der Befehl ausgeführt wurde, wie ursprünglich vom OP angefordert.