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"
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:
$ 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.
rcfile
préparée qui lance vos commandesPréparer somercfile
:
source ~/.bashrc
echo foo
echo bar
Puis lancez:
$ gnome-terminal -e "bash --rcfile somercfile"
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
Enfin celui-ci fonctionne pour moi:
gnome-terminal --working-directory=WORK_DIR -x bash -c "COMMAND; bash"
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.
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\""
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