Abrindo várias abas com o gnome-terminal

13

Estou tentando criar um comando que abrirá 3 serviços da pilha Rails, rails s, spork e autotest. Eu posso executar esses comandos individualmente, abrindo 3 terminais, indo para a pasta do aplicativo e executá-los. Eu posso até abrir 3 novas abas e executar os comandos em cada uma delas.

O problema é que eles falham quando eu tento abrir as abas via gnome-terminal da seguinte forma:

gnome-terminal --tab --title="rails s" -e "rails s" --tab --title="spork" -e "spork" --tab --title="autotest" -e "autotest"

Erro (para spork e autotest):

There was an error creating the child process for this terminal
Failed to execute child process "spork" (No such file or directory)

Surpreendentemente, ele funciona para 'rails s' (a guia mostra o servidor em execução).

Alguma idéia?

    
por Manuel 03.04.2013 / 18:27

2 respostas

8

Abaixo está uma resposta de stackoverflow.com

  1. Adicione um eval "$BASH_POST_RC" ao final do seu .bashrc

  2. Defina a variável de ambiente BASH_POST_RC para cada guia com o comando que você deseja executar, por exemplo: gnome-terminal --working-directory="/home/zardoz/projects/my_rails_app" --tab -e 'bash -c "export BASH_POST_RC=\"rails server\"; exec bash"' --tab -e 'bash -c "export BASH_POST_RC=\"autotest\"; exec bash"'

por green 03.04.2013 / 23:38
13

Invocando gnome-terminal três vezes e vinculando os comandos com && não funcionará, e as guias não aparecerão no mesmo terminal e, de fato, você terá que sair do primeiro terminal para o próximo a aparecer.

A maneira de garantir que todas as guias sejam abertas em uma instância de gnome-terminal ao mesmo tempo é usar a opção --tab-with-profile=PROFILENAME . No comando abaixo, você pode deixar o primeiro comando como gnome-terminal --tab , já que é a primeira janela a ser gerada; Agora tudo que você precisa saber é qual perfil você está usando e você pode usar --tab-with-profile=YourProfile para invocar os outros comandos e todos aparecerão de uma vez no terminal original aberto.

Aqui está o seu comando modificado:

gnome-terminal --tab --title="rails s" -e "rails s" --tab-with-profile=Default --title="spork" -e "spork" --tab-with-profile=Default --title="autotest" -e "autotest"

(Para futuros leitores: substitua os nomes de programa fornecidos após -e para testar a linha de comando dada aqui; lembre-se de que seus destinos para -e devem estar instalados e $PATH ; para itens que não estão em $PATH use um caminho absoluto, como, por exemplo, /opt/mike/program )

Lembre-se de especificar o perfil real que você está usando para os --tab-with-profile switches. A primeira chamada de gnome-terminal deve usar --tab e todo o restante --tab-with-profile . Com esse método, deve ser possível abrir um grande número de guias na mesma instância de gnome-terminal .

Encontre o perfil que você está usando clicando com o botão direito do mouse em gnome-terminal e veja os perfis e haverá um marcador no que você está usando atualmente:

Vá para Preferências de perfil para mais informações e para verificar o nome do perfil.

Para mais informações, consulte man gnome-terminal e os Man pages on-line do Ubuntu .

Nota :

Se você tiver problemas para iniciar seus programas com gnome-terminal , adicione o local a $PATH , ou crie um symlink e coloque-o em um local $PATH , ou (o que foi muito útil aqui): crie um local simples bash wrapper script e chame isso na linha de comando gnome-terminal acima. (Você deve chamá-lo com um caminho absoluto: ou seja, /location/of/script e não apenas o nome dele.)

Como exemplo:

#!/bin/bash

cd $HOME/.rvm/gems/ruby-2.0.0-p0/bin 
spork

exit 0

Em seguida, nomeie o script, torne-o executável e chame-o na linha de comando gnome-terminal acima. Faça isso para todos os programas não repo que são problemáticos.

    
por user76204 03.04.2013 / 18:53