Question Comment puis-je créer un script qui ouvre des fenêtres de terminal et exécute des commandes dans celles-ci?


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.

Existe-t-il un moyen 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).


111
2018-06-02 19:58


origine




Réponses:


gnome-terminal -e commander

ou

xterm -e commander

ou

konsole -e commander

Plutôt

Terminal -e commander

Pour que le terminal reste quand la commande est terminée:

En konsole il y a un --noclose drapeau.

Dans xterm, il y a un -hold drapeau.

Dans gnome-terminal, aller à modifier -> Préférences de profil -> Titre. Clique le Commander languette. Sélectionner Tenez le terminal dans le menu déroulant étiqueté Lorsque la commande quitte. Vous devez créer un nouveau profil pour cela et exécuter avec

gnome-terminal --window-with-profile =NOM DE LA FICHIER -e commander

112
2018-06-02 20:03



Si j'essaie de tenir le terminal, j'obtiens "le processus enfant est normalement sorti avec le code d'état 127" - Darshan Chaudhary
gnome-terminal n'a plus l'option de titre :( - törzsmókus
@ törzsmókus Il fonctionne dans Ubuntu 14.04 avec gnome-terminal 3.6.2. Quelle distribution et version de gnome-terminal utilisez-vous? - bhass1
16.04 LTS, gnome-terminal 3.18.3. @ bhass1 c'est 2017… - törzsmókus
@ törzsmókus c'est 2017 en effet! Les versions LTS ont une durée de vie de 5 ans. 14.04 ne se termine pas avant avril 2019. wiki.ubuntu.com/Releases - bhass1


Au lieu de coder en dur gnome-terminal, konsole, et cetera, utilisez le système Alternatives. Le programme qui exécute l'émulateur de terminal par défaut est le suivant:

x-terminal-emulator

Sur mon système, il ouvre une nouvelle instance de Konsole chaque fois que j'exécute cette commande.

Heureusement, les terminaux semblent soutenir le -e option pour exécuter une commande (je l'ai vérifié pour konsole et gnome-terminal). Les arguments après la commande sont transmis à la commande appelée. Bash refuse de rester ouvert dans mon terminal, un script supplémentaire est nécessaire pour obtenir un terminal:

#!/bin/sh
"$@"
exec "$SHELL"

Si vous avez enregistré le script précédent en tant que /home/user/hacky et l'a rendu exécutable, vous exécuteriez vos scripts avec:

x-terminal-emulator -e /home/user/hacky your-script optional arguments here

Le chemin complet est requis et /home/user/hacky doit être exécutable.

Ma tentative précédente de lancer un script dans une nouvelle fenêtre de terminal se trouve dans révision n ° 2, c'était avant que je réalise que les arguments peuvent être transmis à x-terminal-emulator.


47
2018-06-02 20:29



Dans ce cas, cela n'aidera pas beaucoup car le demandeur veut faire quelque chose qui n'est pas le même pour tous les terminaux. - nickguletskii
Tentative n ° 3: celle-ci doit garder le terminal ouvert et exécuter le programme avec des arguments facultatifs. - Lekensteyn
J'ai utilisé l'option gnome, cependant, une fois que je lance mon script, le terminal principal se ferme !! .. toute idée pourquoi? - Suda.nese
@ Suda.nese C'est par conception, quand le "terminal" a fini d'exécuter le script, il quittera parce qu'il n'y a plus rien à faire. Vous pouvez "réparer" ceci en appelant un shell où vous pouvez exécuter des commandes (bash) ou avoir une ligne telle que read -p "Press Return to continue". - Lekensteyn
Comment pouvez-vous exécuter plusieurs commandes dans le terminal? Par exemple cd xxx && start.sh. L'interpréteur voit le && comme la deuxième partie de la commande (ce qui est logique), mais si je le cite, il essaie alors d'exécuter le tout comme un gros argument - Richard


Tout simplement-

#!/bin/bash

/etc/init.d/ccpd status

Ceci est suffisant pour les autres commandes qui n'ont pas besoin d'afficher quoi que ce soit dans le terminal. Mais ici, il faut voir le statut affiché.
Donc, il faut courir dans une fenêtre de terminal

#!/bin/bash

gnome-terminal -e "/etc/init.d/ccpd status"  --window-with-profile=NAMEOFTHEPROFILE

L'autre poste prévu [] être un espace réservé

Ici, "NAMEOFTHEPROFILE" doit être remplacé par le nom du profil qui "contient le terminal lorsque la commande est terminée".

enter image description here

enter image description here


7
2018-01-23 09:31



@cipricus je crois [] était juste placeholder - Karthik T
je l'ai. mais je dois faire en sorte que le terminal ne ferme pas aussi vite. je suppose que c'est aussi dans la question liée - cipricus
@cipricus as-tu essayé le profil un? Juste besoin d'ajouter --window-with-profile=NAMEOFTHEPROFILE à ce que j'ai donné - Karthik T
@cipricus Je devrais rentrer chez moi pour donner de meilleures instructions, mais l'idée est de créer un profil spécial avec cet ensemble d'options, et d'utiliser le nom du profil spécial à l'endroit ci-dessus. - Karthik T
@cipricus si cela vous suffit, alors ça va. Le profil n'est rien de plus qu'un groupe de paramètres. Vous pouvez configurer les paramètres UNIQUEMENT pour les utiliser dans votre script et ne pas avoir à les utiliser dans tous les terminaux. Vous pouvez voir Modifier -> Profils pour voir tous les profils que vous avez, et vous en ajouteriez un qui a été configuré comme expliqué dans le message que vous avez lié. - Karthik T


commentant la réponse de Lekensteyn. Je sais que c'est un ancien message, mais pour ceux qui trouvent cela utile (comme je viens de le faire) Au lieu de faire un autre "script hacky" avec juste une fonction dans le script que vous appelez

hacky_function()
{
"$@"
exec "$SHELL"
}

Appelez votre script avec "x-terminal-emulator -e / path / to / script arguments optionnels hacky_function ici"

N'oubliez pas de mettre "$ @" à la fin du script


1
2017-12-06 20:11





Utilisez le commande d'écran et -d se détache d'une session d'écran existante et se rattache ici -m forcer une nouvelle session d'écran -S crée une session nommée au lieu d'utiliser le nom par défaut


-2
2018-04-13 20:00



cette réponse n'est pas claire du tout, veuillez prendre soin de rendre plus compréhensible - azerafati
@azerafati en effet, l'écran n'ouvre aucune fenêtre de terminal ... n'est même pas destiné à ce package génial ... - erm3nda