Ouvrir le terminal avec plusieurs onglets et exécuter l'application

16

Je suis nouveau dans les scripts shell Linux. Je veux écrire un script shell qui ouvrira le terminal avec plusieurs onglets; il doit exécuter l'application client rtsp dans chaque onglet.

Pour cela, j'ai parcouru la question ici dans ce forum et essayé de coder comme ci-dessous,

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

Ceci est en cours d'exécution et ouvre la fenêtre du terminal avec des onglets mais soudainement, elle se fermera. Je ne reçois aucune erreur.

user172001
la source

Réponses:

13

Utilisez cette variante du script pour faire ce que vous voulez:

#!/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

Généralement, un script comme celui-ci:

#!/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

ouvrira un nouveau terminal avec n onglets exécutant le <command-line_or_script>dans chaque onglet. Cela peut être très utile lorsque vous voulez par exemple ouvrir un terminal avec quelques onglets avec l'interpréteur à un chemin spécifique (en utilisant cd /pathdans le script ci-dessus).

De plus, lisez man bash, ce post et ce post pour comprendre les changements.

J'ai testé ces scripts et ils fonctionnent.

Radu Rădeanu
la source
Identique à ce que j'ai dit. Il s'affiche et se ferme et aucune erreur ne se produit également. Comment résoudre ce problème?.
user172001
ok maintenant, il affiche les fenêtres avec des onglets mais ne lance l'application dans aucun onglet. et expliquez-moi un peu comment cela a résolu le problème d'affichage de la fenêtre.
user172001
@ user172001 Maintenant ça marche, vérifiez les nouvelles modifications!
Radu Rădeanu
c'est plutôt cool. +1
Nishant
1
J'ai essayé d'ajouter cmd1 && cmd2dans la chaîne de commande pour exécuter plusieurs commandes. Il semble ne fonctionner que le premier. Suis-je en train de faire quelque chose de mal flagrant?
byxor
7

J'ai trouvé ma propre réponse. Je pense que c'est une meilleure approche car:

  1. Je peux le comprendre. Je ne suis pas un expert en bash et aucune explication n'a été donnée dans la réponse plus populaire pour ce qui est ..., ${}, -eou@
  2. Il vous permet de personnaliser facilement le titre et la commande pour chaque onglet
  3. Ai-je dit que c'était beaucoup plus facile à comprendre?

Notez que la ; $SHELLfin de chaque commande gnome-terminal est ce qui maintient la fenêtre du terminal ouverte. Sinon, il se fermerait immédiatement.

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
la source