Abra o terminal gnome programaticamente e execute comandos após a execução do bashrc

Abra o terminal gnome programaticamente e execute comandos após a execução do bashrc

Para iniciar meu ambiente de desenvolvimento, escrevi um pequeno script. Uma parte é abrir um terminal gnome com diversas abas onde automaticamente alguns comandos deverão ser executados. Alguns desses comandos dependem de um .bashrc já executado. Mas ao usar

gnome-terminal --tab -e "comando" --tab --tab

o comando é executado antes de .bashrc ser executado. Existe a possibilidade de fazer um gnome-terminal -e automatizado se comportar como um usado manualmente? (mesmo comandos como "cd /foo/bar" não funcionam com gnome-terminal -e)

Responder1

Depois que o gnome-terminal inicia o bash, ele fica fora do loop no que diz respeito à execução do comando: ele gerencia apenas a entrada e a saída. Então você precisará da cooperação do bash para executar algo depois de ~/.bashrccarregado.

Primeiro, em muitos casos, você não precisa executar comandos depois do ~/.bashrc. Por exemplo, abrir um terminal em um diretório específico pode ser feito simplesmente com cd /foo/bar && gnome-terminal. Você pode definir variáveis ​​de ambiente de maneira semelhante: VAR=value gnome-terminal. (Se você ~/.bashrcsubstituir variáveis ​​de ambiente, você está fazendo errado:definições de variáveis ​​de ambiente pertencem a~/.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, deverá usar -eem vez de -x. O terminal Gnome divide inutilmente o argumento em -eespaços em vez de executá-lo através de um shell. No entanto, você pode escrever um comando 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çaistoexecute os comandos. Por exemplo, inclua o seguinte código no final de ~/.bashrc:

eval "$BASH_POST_RC"

Então, para executar algum código depois (na verdade, 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 recomende fazer isso dessa forma, você pode estar interessado nas técnicas mencionadas em Como iniciar um terminal com determinado texto já inserido na linha de comando?.

Responder2

Quando você usa a -eopção, ele gnome-terminalexecutará esse comando sem iniciar um novo shell (você pode até executar algo como: gnome-terminal -e gedit), então se quiser executar um comando no bashshell em um novo terminal/guia, você terá que fazer algo assim:

gnome-terminal -x bash -c "command"

Mas observe que quando "command"terminar o terminal/guia também terminará.

informação relacionada