Preciso abrir várias guias do terminal, atribuir-lhes títulos, acessar um diretório e fazer com que cada guia execute um comando.
Eu sou novo no Linux e em scripts de shell. Após pesquisar online e verificar algumas soluções, criei este script ( EDITADO com base 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 este erro:
Ocorreu um erro ao criar o processo filho para este terminal
Outra falha é que, se eu interromper o comando em execução, ele fechará 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 script? 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 especificado 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 ele me fornece 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 essa pasta for acessada .
cmds[1]="'ping 192.168.9.9'"
, me dá o mesmo erro, mas resolvi removendo a citação única. Então, se eu escrever, cmds[1]="ping 192.168.9.9"
funciona.
tab=" --tab-with-profile=Default"
??