web-dev-qa-db-fra.com

Eviter la fermeture de gnome-terminal après l'exécution du script?

J'ai créé un script bash qui ouvre plusieurs terminaux gnome, se connecte aux ordinateurs de la classe via ssh et exécute un script.

Comment puis-je éviter que le gnome-terminal se ferme une fois le script terminé? Notez que je veux aussi pouvoir entrer d'autres commandes dans le terminal.

Voici un exemple de mon code:

gnome-terminal -e "ssh root@<ip> cd /tmp && ls"
59
Marten Bauer

Si je comprends bien, vous voulez que gnome-terminal s'ouvre, faites-le exécuter certaines commandes, puis passez à l'invite pour pouvoir entrer d'autres commandes. Gnome-terminal n'est pas conçu pour ce cas d'utilisation, mais il existe des solutions de contournement:

Laissez gnome-terminal exécuter bash et dites à bash d’exécuter vos commandes, puis exécutez bash

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

Le exec bash à la fin est nécessaire car bash -c se terminera une fois les commandes terminées. exec provoque le remplacement du processus en cours par le nouveau processus, sinon deux processus bash seront en cours d'exécution.

Laissez gnome-terminal lancer bash avec une rcfile préparée qui lance vos commandes

Préparer somercfile:

source ~/.bashrc
echo foo
echo bar

Puis lancez:

$ gnome-terminal -e "bash --rcfile somercfile"

Laissez gnome-terminal lancer un script qui lance vos commandes, puis passe à bash

Préparer scripttobash:

#!/bin/sh
echo foo
echo bar
exec bash

Définissez ce fichier comme exécutable.

Puis lancez:

$ gnome-terminal -e "./scripttobash"

Sinon, vous pouvez faire un genericscripttobash:

#!/bin/sh
for command in "$@"; do
  $command
done
exec bash

Puis lancez:

$ gnome-terminal -e "./genericscripttobash \"echo foo\" \"echo bar\""

Chaque méthode a ses bizarreries. Vous devez choisir, mais choisissez judicieusement. J'aime la première solution pour sa verbosité et sa franchise.

Cela dit, cela pourrait vous être utile: http://www.linux.com/archive/feature/151340

83
lesmana

Enfin celui-ci fonctionne pour moi:

gnome-terminal --working-directory=WORK_DIR -x bash -c "COMMAND; bash"
13
Łukasz Frankowski
  • Réponse de débordement de pile: le terminal se ferme lorsque la commande exécutée est terminée; vous devez donc écrire une commande qui ne se termine pas immédiatement. Par exemple, pour laisser la fenêtre du terminal ouverte jusqu'à ce que vous appuyiez sur Enter dedans:

    gnome-terminal -e "ssh Host 'cd /tmp && ls'; read line"
    
  • super utilisateur réponse: Créez un profil dans lequel la préférence "Titre et commande/Lorsque la commande quitte" est définie sur "Maintenir le terminal ouvert". Appelez gnome-terminal à l'aide de l'option --window-with-profile ou --tab-with-profile pour spécifier le nom du terminal.

11
Gilles

Exécutez avec -ic à la place -i pour que le processus de fermeture du terminal se produise lorsque vous fermez votre interface de terminal:

gnome-terminal -e "bash -ic \"echo foo; echo bar; exec bash\""
5
Zini

La solution idéale serait de demander une entrée utilisateur avec echo " Appuyez sur n’importe quelle touche ".

Mais si vous double-cliquez sur Nautis ou Nemo et sélectionnez Exécuter dans un terminal, cela ne semble pas fonctionner.

Dans le cas de Ubuntu , un shell conçu pour un démarrage rapide et une exécution avec uniquement des fonctionnalités standard est utilisé, nommé dash je crois . Pour cette raison, Shebang est la toute première ligne de départ avec enable utilisation appropriée des fonctionnalités bash . Normalement, ce serait: #!/bin/bash ou similaire . Sous Ubuntu, j’ai appris que cela devrait être: #!/usr/bin/env bash.

Il existe de nombreuses solutions de contournement de l'écran avant que l'interprète ne voie une erreur de syntaxe dans une commande bash.

La solution sous Ubuntu qui a fonctionné pour moi:

#!/usr/bin/env bash

your code

echo Press a key...
read -n1
0
Leo