Abrindo várias abas com o terminal gnome

16

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

O problema é que eles falham quando tento abrir as guias via gnome-terminal da seguinte maneira:

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

Erro (para spork e autoteste):

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 ideia?

Manuel
fonte

Respostas:

9

Abaixo está uma resposta de stackoverflow.com

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

  2. Defina a BASH_POST_RCvariável de ambiente para cada guia para 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"'

verde
fonte
15

Invocar gnome-terminaltrês vezes e alinhar os comandos com && não funcionará, e as guias não aparecerão no mesmo terminal e, na verdade, você precisará sair do primeiro terminal para que o próximo apareça.

A maneira de garantir que todas as suas guias sejam abertas em uma instância de gnome-terminaltodas ao mesmo tempo é usar a --tab-with-profile=PROFILENAMEopção No comando abaixo, você pode deixar o primeiro comando, gnome-terminal --tabpois é a primeira janela a ser gerada; Agora, tudo o que você precisa saber é qual perfil está usando e pode usar --tab-with-profile=YourProfilepara chamar os outros comandos e todos aparecerão de uma só 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 programas fornecidos depois -epara testar a linha de comando fornecida aqui; lembre-se de que seus destinos -edevem estar instalados e inseridos $PATH; para coisas que não estão em $PATHuso, um caminho absoluto, como, por exemplo /opt/mike/program)

Lembre-se de especificar o perfil real que você está usando para os --tab-with-profilecomutadores. A primeira chamada de gnome-terminaldeve usar --tabe todo o resto --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 no momento, clicando com o botão direito do mouse gnome-terminale veja os perfis, e haverá um marcador no perfil que você está usando no momento:

insira a descrição da imagem aqui

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

Para mais informações, consulte man gnome-terminale o Ubuntu manpages online .


Nota :

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

Como um 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 gnome-terminallinha de comando acima. Faça isso para todos os programas que não sejam de repositório problemático.

sobremesa
fonte
Como conheço o perfil? (Eu tentei com defeito, o meu nome de utilizador, e ~ / .profile)
Manuel
Ele diz Padrão, mas eu recebo o mesmo erro usando --tab-with-profile = Padrão
Manuel
@Manuel A outra possibilidade é que os comandos de destino não estejam no seu $PATH: especifique a localização sporke os outros com um caminho absoluto.
O comando que estou usando é gnome-terminal --tab --title = "trilhos s" -e "trilhos s" --tab-with-profile = Padrão --title = "spork" -e "spork" - tab-with-profile = Padrão --title = "autoteste" -e "autoteste" (copie / cole da sua resposta). Sobre $ PATH, se esse é o problema, por que ele funciona em uma guia aberta através do menu?
Manuel
@Manuel Como você diz na sua pergunta, você deve ir para "a pasta do aplicativo" e executá-los a partir daí, o que significa que eles não estão $PATH. O método na resposta é o que eu uso para iniciar todos os programas de linha de comando instalados no repositório em guias diferentes na mesma gnome-terminaljanela, e sempre funciona, como esses outros programas em $ PATH.
0

gnome-terminal --tab -- sh -c "python3 'test.py' ; bash"

esse código abre uma nova aba no terminal executando um script python e quando terminar, essa nova aba não será fechada, porque eu adicionei 'bash' no final deste código ...

se você quiser várias vezes, coloque-o em um loop while no seu script bash

Joao Vitor Deon
fonte