Onglet ouvert par programme dans gnome-terminal, exécute la commande et laisse l'onglet rester ouvert

12

J'essaie d'écrire une commande qui lancera quelques onglets de terminal, exécutera quelque chose dans chaque onglet et gardera chaque onglet ouvert après la fin de la commande, afin que je puisse regarder la sortie et taper plus de commandes dans chaque onglet

quelque chose comme ça:

gnome-terminal --tab -e "ls -a" --tab -e "ls"

mais le problème est que les onglets se ferment dès que les commandes "ls" se terminent. Quelqu'un sait-il comment garder les onglets ouverts?

marque
la source

Réponses:

11

Gnome-terminal peut exécuter une commande ou ouvrir un shell, mais pas les deux.

Il existe une solution de contournement pour faire les deux en encapsulant la commande et en invoquant ensuite le shell en une seule commande.

$ gnome-terminal -e "bash -c \"echo foo; echo bar; exec bash\""

Pour plus d'alternatives, lisez ma réponse à une question similaire sur le débordement de pile: /programming/3512055/avoid-gnome-terminal-close-after-script-execution/3531426#3531426

lesmana
la source
10

Si vous en avez xdotoolet que vous l'avez wmctrlinstallé, le script shell suivant peut fonctionner:

#!/usr/bin/env bash

window="$(xdotool search --class gnome-terminal | head -1)"
xdotool windowfocus $window
xdotool key ctrl+shift+t
xdotool type "$*"
xdotool key Return

Je l'utilise comme ceci:

$ run-in-new-tab 'ls -l'

J'ai trouvé cette idée sur le blog de Trustin Lee .


la source
Merci. Cela fonctionne plutôt bien. Je dois cependant ajouter un sleep 1après les touches ctrl + shift + t pour que cela fonctionne pour moi. J'accepterai cela si rien d'autre ne vient bientôt
Ouais - j'ai trouvé que je devais le sleep 2faire fonctionner 100% du temps. Grande solution cependant - j'ouvre maintenant 8 onglets, qui ssh dans divers serveurs, démarrent divers processus, etc., en utilisant ceci: ma configuration du matin est maintenant totalement scriptée :)
Max Williams
En fait, ce wmctrln'est pas nécessaire.
nedim