Une fois que gnome-terminal a démarré bash, il n’a plus rien à faire en ce qui concerne l’exécution des commandes: il ne gère que les entrées et les sorties. Vous aurez donc besoin de la coopération de bash pour exécuter quelque chose après ~/.bashrc
son chargement.
Premièrement, dans de nombreux cas, vous n'avez pas réellement besoin d'exécuter des commandes après ~/.bashrc
. Par exemple, l’ouverture d’un terminal dans un répertoire particulier peut simplement être réalisée cd /foo/bar && gnome-terminal
. Vous pouvez définir des variables d'environnement d'une manière similaire: VAR=value gnome-terminal
. (Si vous ~/.bashrc
remplacez les variables d'environnement, vous vous y trompez: les définitions de variable d'environnement appartiennent à~/.profile
)
Pour exécuter des commandes dans le terminal, mais avant ~/.bashrc
, vous pouvez faire
gnome-terminal -x sh -c 'command1; command2; exec bash'
Si vous voulez utiliser plusieurs onglets, vous devez utiliser à la -e
place de -x
. Gnome-terminal divise inutilement l'argument de -e
at au lieu de l'exécuter à travers un shell. Néanmoins, vous pouvez écrire une commande shell si vous vous assurez de ne pas y inclure d'espaces. Au moins avec gnome-terminal 2.26, vous pouvez utiliser des tabulations (toutefois, remplacez-les <TAB>
par un caractère de tabulation littéral):
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'
Si vous devez exécuter des commandes après ~/.bashrc
, faites- le exécuter. Par exemple, incluez le code suivant à la fin de ~/.bashrc
:
eval "$BASH_POST_RC"
Ensuite, pour lancer un peu de code après (vraiment, à la fin de) votre bashrc:
gnome-terminal -x sh -c BASH_POST_RC=\''command1; command2'\''; exec bash'
ou (moins lourd sur la citation)
BASH_POST_RC='command1; command2' gnome-terminal
Bien que je ne recommande pas particulièrement de le faire de cette façon, vous pouvez être intéressé par les techniques mentionnées dans
Comment démarrer un terminal avec du texte déjà saisi sur la ligne de commande? .
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
n'invoque pas du tout un shell. Si vous exécutezgnome-terminal -e 'sleep 9'
, la commande est exécutéesleep
avec l'argument9
et aucun shell n'est impliqué. Si vous exécutez,gnome-terminal -e 'sleep 9;bash'
le terminal s'ouvre et se ferme immédiatement, car il sesleep
plaint que l'9;bash
intervalle de temps n'est pas valide. Vous pouvez observer ce qui se passestrace -f -eexecve gnome-terminal -e …
Lorsque vous utilisez l'
-e
option, lagnome-terminal
commande sera exécutée sans démarrer un nouveau shell (vous pouvez même exécuter quelque chose du genre:)gnome-terminal -e gedit
, donc si vous voulez exécuter une commande dans lebash
shell dans un nouveau terminal / onglet, procédez comme suit:Mais notez que quand
"command"
se termine le terminal / onglet se terminera aussi.la source
gnome-terminal -x bash -c "command"
(-e
attend un seul argument). Et c'est assez simple d'exécuter un shell aprèscommand
, du moins tant que vous ne démarrez qu'un seul onglet - voyez ma réponse .gnome-terminal -x "bash" -c "command"
a travaillé pour moi. Notez les guillemets sur la valeur -x arg.# Option “-x” is deprecated and might be removed in a later version of gnome-terminal.
`-x
et-e
optons sont déconseillés ???~/.bashrc
avant l'exécution de la commande, comme demandé à l'origine par l'OP.