web-dev-qa-db-fra.com

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

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

Pour cela, je suis passé par la question ici dans ce forum et a 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 soudain, il va se fermer. Je ne reçois aucune erreur.

14
user172001

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 des onglets avec l'interpréteur sur un chemin spécifique (en utilisant cd /path dans le script ci-dessus).

Lisez aussi man bash, this post et this post pour comprendre les modifications.

J'ai testé ces scripts et ils fonctionnent.

12
Radu Rădeanu

Je suis venu avec ma propre réponse. Je pense que c'est une meilleure approche parce que:

  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 courante expliquant ce que sont ..., ${}, -e ou @
  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 le ; $Shell à la fin 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'" 
4
Gabriel Staples