Abra o terminal do gnome programaticamente e execute comandos após o bashrc ser executado

32

Para iniciar meu ambiente de desenvolvimento, escrevi um pequeno roteiro. Uma parte é abrir um terminal gnome com várias abas onde automaticamente alguns comandos devem ser executados. Alguns desses comandos dependem de um .bashrc já executado. Mas ao usar

gnome-terminal --tab -e "command" --tab --tab

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

    
por Zardoz 11.10.2010 / 00:04

2 respostas

40

Uma vez que o gnome-terminal tenha iniciado o bash, ele está fora do loop no que diz respeito à execução do comando: ele apenas gerencia a entrada e a saída. Então, você precisará da cooperação do bash para executar algo após ~/.bashrc ter sido carregado.

Primeiro, em muitos casos, você não precisa executar comandos após ~/.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 o seu ~/.bashrc substituir as 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 de ~/.bashrc , você pode fazer

gnome-terminal -x sh -c 'command1; command2; exec bash'

Se você quiser usar várias guias, precisará usar -e em vez de -x . O Gnome-terminal divide o argumento de -e em espaços, sem ajuda, em vez de executá-lo através de um shell. No entanto, você pode escrever um comando shell se tiver certeza de não incluir espaços nele. Pelo menos com o gnome-terminal 2.26, você pode usar abas, embora (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 após ~/.bashrc , faça ele executar os comandos. Por exemplo, inclua o seguinte código no final de ~/.bashrc :

eval "$BASH_POST_RC"

Em seguida, execute um código depois (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 não recomende particularmente fazê-lo desta maneira, você pode estar interessado nas técnicas mencionadas em Como iniciar um terminal com algum texto já inserido na linha de comando? .

    
por 11.10.2010 / 00:29
6

Quando você usa a opção -e , o gnome-terminal executará esse comando sem iniciar um novo shell (você pode até executar algo como: gnome-terminal -e gedit ), portanto, se quiser executar um comando no bash shell em um novo terminal / tab você tem que fazer algo assim:

gnome-terminal -x bash -c "command"

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

    
por 11.10.2010 / 00:22