Abra o Terminal com várias abas e execute o aplicativo

13

Eu sou novo no script shell do Linux. Eu quero escrever um script de shell que irá abrir o terminal com várias abas; ele deve executar o aplicativo cliente rtsp em cada guia.

Para isso, eu passei por uma pergunta aqui neste fórum e tentei codificar como abaixo,

tab="--tab-with-profile=Default -e "
cmd="java RunRTSPClient"
for i in 1 2 3 4 5
   do
#   
   foo="$foo $tab $cmd"         
   done
gnome-terminal $foo
exit 0

Isso está em execução e abre a janela do terminal com abas, mas de repente ele será fechado. Eu não estou recebendo erros.

    
por user172001 02.07.2013 / 14:52

2 respostas

12

Use esta variante do script para fazer o que você deseja:

#!/bin/bash

tab="--tab-with-profile=Default"
cmd="bash -c 'java RunRTSPClient';bash"
foo=""

for i in 1 2 3 4 5; do
      foo+=($tab -e "$cmd")         
done

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

exit 0

Geralmente, um script como este:

#!/bin/bash

tab="--tab"
cmd="bash -c '<command-line_or_script>';bash"
foo=""

for i in 1 2 ... n; do
      foo+=($tab -e "$cmd")         
done

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

exit 0

irá abrir um novo terminal com n abas executando o <command-line_or_script> em cada aba. Isso pode ser muito útil quando você deseja, por exemplo, abrir um terminal com algumas guias com o interpretador em um caminho específico (usando cd /path no script acima).

Além disso, leia man bash , este post e este post para entender as mudanças.

Eu testei esses scripts e eles funcionam.

    
por Radu Rădeanu 02.07.2013 / 15:08
1

Eu criei minha própria resposta. Acho que essa é uma abordagem melhor porque:

  1. Eu posso entender isso. Eu não sou um especialista em bash e nenhuma explicação foi dada na resposta mais popular para o que é ... , ${} , -e ou @
  2. Permite personalizar facilmente o título e o comando de cada guia
  3. Eu disse que é muito mais fácil de entender?

Observe que o ; $SHELL no final de cada comando gnome-terminal é o que mantém a janela do terminal aberta. Caso contrário, fecharia imediatamente.

title1="tab 1"
title2="tab 2"
title3="tab 3"

cmd1="cd /etc"
cmd2="cd ~/Documents"
cmd3="cd /usr/local"

gnome-terminal --tab --title="$title1" --command="bash -c '$cmd1; $SHELL'" \
               --tab --title="$title2" --command="bash -c '$cmd2; $SHELL'" \
               --tab --title="$title3" --command="bash -c '$cmd3; $SHELL'" 
    
por Gabriel Staples 20.04.2018 / 03:10