ouvrir le terminal gnome avec plusieurs onglets et exécuter quelques commandes dans chaque onglet

12

Voici ce que je veux accomplir:

  1. Je veux ouvrir un terminal gnome avec cinq onglets
  2. Je veux exécuter automatiquement un ensemble de commandes (5 à 10 commandes) dans chaque onglet
    Premier onglet: doit définir la vue en clair et ensuite exécuter une ou plusieurs commandes
    Deuxième onglet: doit se connecter à un serveur et exécuter certaines commandes
    Troisième onglet: ne doit exécuter que certaines commandes

gnome-terminal --geometry=260x25-0+0 --tab -e "csh -c \"ct setview myViewName; cal\"" –tab --tab --tab (fonctionne bien, la vue est définie mais aucune commande n'est exécutée après cela)

J'ai essayé de le faire de cette façon à la place et d'exécuter cela dans le script ci-dessous:

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 

Si je supprime les exec gnome-terminal --geometry 125x49-0+81 –tablignes de l'exemple et appelle un script à partir d'un autre fichier, cela fonctionne très bien - je me connecte au serveur et toutes les commandes sont exécutées. Quelqu'un peut-il m'aider à résoudre ce problème?

Écrire un script que j'appelle pour chaque onglet n'est pas une option, car j'aurai 5 terminaux avec 5-7 onglets dans chacun à la fin, et cela signifie que ce serait 25 à 30 scripts à écrire (coûtent plus cher que cela aide dans mon problème).

ekido
la source
Non pas que je sois un expert du terminal GNOME, mais les onglets que vous créez doivent être enregistrés dans un profil. Après avoir créé le profil, je pense que vous pouvez l'écrire. Voir Gérer les profils dans l'aide de GNOME.
eyoung100

Réponses:

11

Cela semble fonctionner sur ma machine:

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

Veuillez noter que dès que les processus exécutés par -e seront terminés, ils se termineront. Dans ce cas, bash est chargé, exécute toutes les commandes que vous lui passez et existe immédiatement. J'ai mis les instructions de lecture pour attendre la saisie de l'utilisateur. De cette façon, ces onglets ne se fermeront pas jusqu'à ce que vous appuyiez sur une touche, juste pour que vous puissiez le voir dans cet exemple. Sans eux, il semblerait que seuls deux onglets s'ouvraient, car les deux autres s'exécuteraient et se fermeraient trop rapidement.

Unix-Ninja
la source
Merci pour votre réponse. Bien sûr, j'arrive à voir la sortie d'une commande (dans ce cas "date") mais je voudrais exécuter plusieurs commandes, pouvoir voir la sortie et continuer à écrire manuellement de nouvelles commandes dans le même onglet.
ekido
3

Puisque bash se ferme une fois la commande terminée, vous pouvez appeler une autre instance de bashafter votre commande pour obtenir un shell interactif:

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
la source
il semble que si je ferme le terminal, les processus sous-jacents ne se ferment pas automatiquement, y a-t-il une solution à cela aussi? Je voudrais fermer la fenêtre entière et tous les onglets avec leurs processus devraient être
supprimés
2

Enregistrez ci-dessous en tant que 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

ajoutez script.sh à $ PATH puis exécutez-le

gnome-terminal -x script.sh

Voir Ouvrir un nouvel onglet dans gnome-terminal à l'aide de la ligne de commande .

rofrol
la source
tout le reste a échoué à part cela. Maintenant, j'aimerais avoir certains onglets ouverts sans commande. Par exemple, j'aimerais avoir dix onglets ouverts, mais trois s'ils pourraient exécuter des commandes comme htop ..
nyxee