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

16

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

Por isso, eu passei por perguntas 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á sendo executado e abre a janela do terminal com abas, mas de repente ele será fechado. Não estou recebendo nenhum erro.

user172001
fonte

Respostas:

13

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

abrirá um novo terminal com n guias executando o <command-line_or_script>em cada guia. Isso pode ser muito útil quando você deseja, por exemplo, abrir um terminal com algumas guias com o intérprete em um caminho específico (usando cd /patho script acima).

Além disso, ler man bash, este post e este post para entender as alterações.

Eu testei esses scripts e eles funcionam.

Radu Rădeanu
fonte
Mesmo que eu disse, ele apenas exibe e fecha e nenhum erro também ocorre. Como consertar este problema?.
precisa saber é o seguinte
ok agora está mostrando as janelas com guias, mas não executando o aplicativo em nenhuma guia. e também me explique um pouco, como isso corrigiu o problema de exibição da janela.
precisa saber é o seguinte
@ user172001 Agora está funcionando, verifique as novas edições!
Radu Rădeanu
Isso é bem legal. +1
Nishant
11
Eu tentei adicionar cmd1 && cmd2na cadeia de comando para executar vários comandos. Parece apenas executar o primeiro. Estou fazendo algo descaradamente errado?
Byxor
7

Eu vim com minha própria resposta. Eu acho que essa é uma abordagem melhor porque:

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

Note que ; $SHELLno final de cada comando do gnome-terminal é o que mantém a janela do terminal aberta. Caso contrário, seria fechado 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'" 
Gabriel Staples
fonte