Abrindo várias guias de terminal e executando o comando

9

Eu preciso abrir várias guias de terminal, dar a elas títulos, ir a um diretório e fazer com que cada guia execute um comando.

Eu sou novo no Linux e shell scripts, depois de pesquisar online e verificar algumas soluções, eu fiz este script ( EDITED baseado nas respostas abaixo):

#!/bin/bash

cd /media/Extra/Project

tab=" --tab-with-profile=Default"
options=(--tab --title=Terminal)

cmds[1]="'rails s'"
titles[1]="Server"

cmds[2]="'rails c'"
titles[2]="Console"


for i in 1 2; do
  options+=($tab --title="${titles[i]}"  -e "bash -c \"${cmds[i]} ; bash\"" )          
done

gnome-terminal "${options[@]}"


exit 0

Ele abre as guias, nomeia-as, mas falha ao executar os comandos que geram esse erro:

  

Ocorreu um erro ao criar o processo filho para este terminal

Outra falha é que, se eu parasse o comando de execução, ele fecha a guia, o que eu não quero. Eu preciso ser capaz de parar o comando e executá-lo novamente na mesma guia.

O que há de errado com o roteiro? Existe outra maneira mais simples de fazer isso?

  

Nota: Se eu removi a parte (-e "\" bash -c $ {cmds [i]}; bash \ "") do comando, ela abre as guias no diretório fornecido e nomeia-as, sem erros.

-Edit-1:

Depois de aplicar a resposta do @Tuknutx abaixo e editar o script, o erro não aparece mais, mas me dá bash: rails c: command not found e rails s cria um novo aplicativo rails em vez de iniciar o servidor rails, estou usando .rmvrc para selecionar um gemset assim que esta pasta for acessada.

    
por Brary 20.07.2014 / 20:47

4 respostas

3

Eu recomendaria usar tmux com tmuxinator , ele fará o trabalho para você e você poderá contar com terminator layouts também!

Para o terminator layout checkout, a resposta do mhnagaoka aqui askubuntu também:

  
  1. Depois de configurar seu layout, clique com o botão direito do mouse em qualquer plano de fundo do terminal e escolha a guia Preferências Layouts e clique em   Botão Adicionar .

  2.   
  3. Dê um nome e pressione Fechar .

  4.   
  5. Isso deve criar o arquivo ~/.config/terminator/config mencionado.

  6.   
  7. Agora você pode iniciar o terminador usando o layout salvo usando: terminator -l yourLayout (substitua yourLayout por qualquer coisa que você   escolheu no passo 2).

  8.   
  9. (opcional) Edite o arquivo ~/.config/terminator/config de modo que, onde ele diz [layouts] e aninha-se abaixo dele [[yourLayout]] , renomeie    yourLayout para padrão e remover / renomear o layout anterior padrão . Agora, quando o Terminator é iniciado sem nenhum parâmetro, ele   carregue seu layout [[default]] personalizado!

  10.   
    
por Islam Azab 30.03.2016 / 08:04
2

Para resumir algumas das outras respostas e seus comentários, aqui está o que acabei:

#!/bin/bash

cd /path/of/my/stuff

tab=" --tab"
options=()

cmds[1]="echo Banana"

cmds[2]="echo Cat"


for i in 1 2; do
options+=($tab -e "bash -c '${cmds[i]} ; bash'" )
done

gnome-terminal "${options[@]}"

exit 0

Observe que tirei a guia "principal", os perfis e os títulos (que parecem estar obsoletos em gnome-terminal ).

    
por Ian Hincks 20.05.2017 / 02:24
1

Tente isto:

options+=($tab --title="${titles[i]}"  -e "bash -c \"${cmds[i]} ; bash\"" ) 

caso contrário, toda a expressão depois de -e será interpretada como o comando.

Para incluir aliases de .bashrc, use -ic em vez de c

    
por TuKsn 20.07.2014 / 22:31
1

O argumento que você está dando a opção -e é "bash -c command; bash" incluindo as aspas. Ele interpreta toda essa string como o nome de um comando! Tente isto em vez disso: -e "bash -c 'command ; bash'" . Dessa forma, o que é executado na sua janela de terminal é command e, depois disso, você recebe um shell secundário, que eu suponho ser o que você deseja. Aliás, você também pode dizer 'command & bash' ; Isso executará o comando no plano de fundo e fornecerá a shell filha imediatamente.

    
por Silvio Levy 20.07.2014 / 21:25