J'ai trois scripts à exécuter lorsque je démarre ma machine Ubuntu. Ils démarrent les services que j'utilise dans mon environnement de développement.
Pour ce faire, j'ouvre manuellement trois terminaux et saisis les commandes.
Est-il possible de créer un script qui ouvrira trois terminaux et exécutera une commande dans chacun d’eux? (Chaque commande doit être dans une fenêtre de terminal distincte pour que je puisse voir leur sortie).
la source
gnome-terminal -e command
ne fonctionne que sicommand
est cité. Donc , cela ne fonctionne pas:gnome-terminal -e "echo hello world; sleep 3"
mais cela ne:gnome-terminal -e "bash -c 'echo hello world; sleep 3'"
. Soupir.; $SHELL
à la fin de la commande. Ex:gnome-terminal --tab --title="test" --command="bash -c 'cd /etc; ls; $SHELL'"
Au lieu de coder en dur
gnome-terminal
,konsole
et ainsi de suite, utilisez le système Alternatives. Le programme qui exécute l'émulateur de terminal par défaut est:Sur mon système, une nouvelle instance de Konsole est ouverte à chaque fois que j'exécute cette commande.
Heureusement, les terminaux semblent supporter l'
-e
option permettant d'exécuter une commande (je l'ai vérifiée pourkonsole
etgnome-terminal
). Les arguments après la commande sont passés à la commande invoquée. Bash refuse de rester ouvert dans mon terminal, un script supplémentaire est nécessaire pour obtenir un terminal:Si vous avez enregistré le script précédent
/home/user/hacky
et l'avez rendu exécutable, vous exécuterez vos scripts avec:Le chemin complet est requis et
/home/user/hacky
doit être exécutable.Ma tentative précédente d'exécuter un script dans une nouvelle fenêtre de terminal se trouve dans la révision 2 , c'était avant que je réalise que les arguments peuvent être passés à
x-terminal-emulator
.la source
bash
) ou avoir une ligne telle queread -p "Press Return to continue"
.cd xxx && start.sh
. L'interprète voit le && comme la deuxième partie de la commande (ce qui est logique), mais si je le cite, il essaie d'exécuter le tout sous la forme d'un argument de poidsTout simplement-
C'est suffisant pour d'autres commandes qui n'ont pas besoin d'afficher quoi que ce soit dans le terminal. Mais ici, il faut voir l'état affiché.
Donc, il doit être exécuté dans une fenêtre de terminal
L'autre poste destiné
[]
à être un espace réservéIci, "NAMEOFTHEPROFILE" doit être remplacé par le nom du profil "Tient le terminal lorsque la commande est fermée".
la source
[]
était juste un espace réservé--window-with-profile=NAMEOFTHEPROFILE
à ce que j'ai donnéAvec l' aide de la réponse de @ nickguletskii et de mon propre commentaire, inspiré par le vote favorable de @ grabantot, voici la méthode que je préfère utiliser, en particulier lorsque je souhaite que le terminal reste ouvert afin que je puisse ensuite l'utiliser manuellement.
Ex. usage: c'est vraiment utile d'ajouter à vos programmes de démarrage pour que ce script s'exécute, ouvre un terminal, crée et nomme un onglet dans le terminal et lance une commande pour vous. Ou, vous pouvez simplement ajouter un lien symbolique à ce script sur votre bureau. J'utilise ce type d'approche pour pouvoir double-cliquer sur une seule icône de mon bureau et la laisser ouvrir un tas de terminaux (avec différents onglets nommés en fonction du travail que je vais effectuer) et de programmes à configurer. mon environnement de programmation, par exemple, pour le travail quotidien.
Voici un exemple artificiel, qui ouvre un seul onglet, le titre "test", puis exécute la commande simple
cd /etc; ls
qu'il contient. La$SHELL
partie à la fin oblige le shell à rester ouvert pour que vous puissiez voir sa sortie et continuer à l'utiliser (j'ai appris cela ailleurs sur Stack Overflow):Voici un exemple plus complexe qui ouvre 3 onglets distincts dans le même terminal gnome. C'est exactement le type de chose que mon raccourci sur le bureau permet de pouvoir ouvrir plusieurs fenêtres de programmation en même temps:
Voici une ventilation de cette commande ci-dessus:
gnome-terminal
= ouvrir un gnome-terminal--tab
= ouvrir un onglet unique pour ce qui vient ensuite--title="tab 1"
= titre cet onglet "onglet 1"--command="bash -c 'cd /etc; ls; $SHELL'"
= lance labash -c 'cd /etc; ls; $SHELL'
commande, qui est une commande que je viens de créer comme exemple; voici ce qu'il fait:bash -c
dit que c'est une commande 'bash'cd /etc
= 'c'changez' de répertoire dans le chemin "/ etc"ls
= Je ne suis pas contenu de ce répertoire$SHELL
= cette information cryptée est nécessaire pour garder le shell ouvert afin que vous puissiez travailler avec. Si vous voulez que le shell s'ouvre, exécutez votre commande, puis fermez-le, supprimez simplement cette partie. Cependant, je veux que l'onglet reste ouvert pour que je puisse faire de la programmation magique. :)--tab
pièce pour produire l'onglet 2, puis à nouveau pour l'onglet 3. Personnalisez au contenu de votre coeur.Capture d'écran:
la source
commentant la réponse de Lekensteyn. Je sais que ceci est un ancien post, mais pour tous ceux qui trouvent cela utile (comme je viens de le faire) au lieu de créer un autre "script hacky" avec juste une fonction dans le script que vous appelez
Appelez votre script avec "arguments optionnels hacky_function de hacky_function -e / path / de x-terminal-emulator ici"
N'oubliez pas de mettre "$ @" à la fin du script
la source
Utilisez la commande screen et -d détachez-vous d'une session screen existante, puis reconnectez-vous ici. -M force une nouvelle session screen -S crée une session nommée au lieu d'utiliser le nom par défaut.
la source