abra o terminal gnome com várias abas e execute alguns comandos em cada aba

12

Isto é o que eu quero realizar:

  1. Eu quero abrir um terminal gnome com cinco abas
  2. Desejo executar um conjunto de comandos (5 a 10 comandos) em cada guia automaticamente
    Primeira guia: deve definir uma visão clara e depois executar um ou mais comandos
    Segunda guia: deve entrar em um servidor e executar alguns comandos
    Terceira guia: deve executar apenas alguns comandos

gnome-terminal --geometry=260x25-0+0 --tab -e "csh -c \"ct setview myViewName; cal\"" –tab --tab --tab (funciona bem, a visualização está definida, mas nenhum comando é executado depois disso)

Tentei fazê-lo dessa maneira e executando isso no script abaixo:

gnome-terminal --geometry 125x18-0-26 --tab -t "some title" -e /home/ekido/Desktop/MyScripts/myScript

#!/usr/bin/expect
exec gnome-terminal --geometry 125x49-0+81 –tab
spawn ssh usert@server
expect "password"
send "*******\r"
expect "user@server100:~>"
send “some command\r"
expect "user@server100:~>"
send “some command"
interact 

Se eu remover as exec gnome-terminal --geometry 125x49-0+81 –tablinhas do exemplo e chamar um script de outro arquivo, ele funcionará bem - eu entrei no servidor e todos os comandos foram executados. Alguém pode me ajudar a resolver isso?

Escrever um script que chamo para todas as guias não é uma opção, pois terei 5 terminais com 5-7 guias em cada uma no final, e isso significa que seriam necessários de 25 a 30 scripts para escrever (custam mais do que ajuda no meu problema).

ekido
fonte
Não que eu seja um especialista no Terminal GNOME, mas as guias que você cria devem ser salvas em um perfil. Depois de criar o perfil, acredito que você pode criar um script. Consulte Gerenciar perfis na ajuda do GNOME.
eyoung100

Respostas:

11

Isso parece funcionar na minha máquina:

gnome-terminal --geometry=260x25-0+0 --tab -e "bash -c 'date; read -n1'" --tab -e "bash -c 'echo meow; read -n1' " --tab --tab

Observe que, assim que os processos executados por -e terminarem, eles serão finalizados. Nesse caso, o bash é carregado, executa os comandos que você passa para ele e existe imediatamente. Coloquei as instruções de leitura para aguardar a entrada do usuário. Dessa forma, essas guias não serão fechadas até que você pressione uma tecla, apenas para que você possa vê-la neste exemplo. Sem eles, seria como se apenas duas guias fossem abertas, porque as outras duas seriam executadas e fechadas muito rapidamente.

Unix-Ninja
fonte
obrigado pela sua resposta. Claro, consigo ver a saída de um comando (neste caso "data"), mas gostaria de executar vários comandos, poder ver a saída e continuar a escrever novos comandos manualmente na mesma guia.
Ekido
3

Como o bash é encerrado após a conclusão do comando, você pode chamar outra instância de bashafter your command para obter um shell interativo:

gnome-terminal  --tab -e "bash -c 'ps -ef; bash'" --tab -e "bash -c 'ls; bash'" --tab -e "bash -c 'top -n 1; bash'"
Jean Spector
fonte
parece que se eu fechar o terminal, os processos subjacentes não se fecham automaticamente, também há uma solução para isso? Gostaria de fechar a janela inteira e todas as guias com seus processos devem ter uma morte
Blub
1

Salvar abaixo como script.sh

#!/usr/bin/env bash

me=$(realpath $0)

commands=(
"echo"
"ls -l && echo 'yes'"
"top"
"ps"
)
len=${#commands[@]}

if [ $# -eq 0 ];then
    num=$len
else
    num=$1
fi

n=$((len-num))
command=${commands[$n]}
num=$((num-1))

xdotool key ctrl+shift+t

if [ $num -gt -1 ]; then
    sleep 1; xdotool type --delay 1 --clearmodifiers "$me $num; ${command}"; xdotool key Return;
fi

adicione script.sh a $ PATH e execute-o

gnome-terminal -x script.sh

Consulte Abrir uma nova aba no gnome-terminal usando a linha de comando .

rofrol
fonte
tudo o resto falhou em parte disso. Agora, eu gostaria de ter algumas das guias abertas sem um comando. Por exemplo, eu gostaria de ter guias dez abrir, mas três se eles poderiam ser a execução de alguns comandos como htop ..
nyxee