Depois que o gnome-terminal inicia o bash, ele fica fora de loop no que diz respeito à execução de comandos: ele gerencia apenas a entrada e a saída. Portanto, você precisará da cooperação do bash para executar algo após o ~/.bashrc
carregamento.
Primeiro, em muitos casos, você não precisa executar comandos depois ~/.bashrc
. Por exemplo, a abertura de um terminal em um diretório específico pode ser feita simplesmente com cd /foo/bar && gnome-terminal
. Você pode definir variáveis de ambiente de forma semelhante: VAR=value gnome-terminal
. (Se você ~/.bashrc
substituir as variáveis de ambiente, estará fazendo errado: as definições das variáveis de ambiente pertencem~/.profile
)
Para executar comandos no terminal, mas antes ~/.bashrc
, você pode fazer
gnome-terminal -x sh -c 'command1; command2; exec bash'
Se você quiser usar várias guias, precisará usar em -e
vez de -x
. O Gnome-terminal, sem ajuda, divide o argumento de -e
em espaços, em vez de executá-lo através de um shell. No entanto, você pode escrever um comando do shell se não incluir espaços nele. Pelo menos com o gnome-terminal 2.26, você pode usar tabulações (substitua <TAB>
por um caractere de tabulação literal):
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'
Se você precisar executar comandos depois ~/.bashrc
, faça -o executar os comandos. Por exemplo, inclua o seguinte código no final de ~/.bashrc
:
eval "$BASH_POST_RC"
Depois, execute um código após (realmente, no final do) seu bashrc:
gnome-terminal -x sh -c BASH_POST_RC=\''command1; command2'\''; exec bash'
ou (menos pesado na citação)
BASH_POST_RC='command1; command2' gnome-terminal
Embora eu particularmente não recomendo fazê-lo dessa maneira, você pode estar interessado nas técnicas mencionadas em
Como iniciar um terminal com determinado texto já inserido na linha de comando? .
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ão invoca um shell. Se você executargnome-terminal -e 'sleep 9'
, isso executa o comandosleep
com o argumento9
, e nenhum shell está envolvido. Se você executargnome-terminal -e 'sleep 9;bash'
, o terminal abrirá e fechará imediatamente, porquesleep
reclama que9;bash
não é um intervalo de tempo válido. Você pode observar o que está acontecendostrace -f -eexecve gnome-terminal -e …
Quando você usa a
-e
opção,gnome-terminal
ele executará esse comando sem iniciar um novo shell (você pode até executar algo comognome-terminal -e gedit
:); portanto, se você quiser executar um comando nobash
shell em um novo terminal / guia, precisará fazer algo assim:Mas observe que quando
"command"
terminar, o terminal / guia também terminará.fonte
gnome-terminal -x bash -c "command"
(-e
espera um único argumento). E é bastante simples executar um shell depoiscommand
, pelo menos desde que você esteja iniciando uma única guia - veja minha resposta .gnome-terminal -x "bash" -c "command"
trabalhou para mim. Observe aspas no valor -x arg.# Option “-x” is deprecated and might be removed in a later version of gnome-terminal.
`-x
e-e
estão obsoletos ???~/.bashrc
antes da execução do comando, conforme solicitado originalmente pelo OP.