J'ai une commande de terminal que je lance depuis un lanceur d'applications. Cela fonctionne très bien, mais la commande échoue parfois. J'aimerais donc que le terminal reste ouvert pour que je puisse voir les résultats. Comment puis-je faire ceci?
En supposant que votre commande s'appelle mycommand
, je changerais mon lanceur pour lancer ceci:
gnome-terminal -e "mycommand|less"
Si vous voulez une solution plus permanente, peut-être plus propre, ouvrez gnome-terminal, allez dans Edition, Préférences de profil et cliquez sur l'onglet Titre et commande. Changez l'option "When command exits" en "Maintenez le terminal ouvert".
Lorsque vous exécutez des commandes, le terminal doit maintenant rester ouvert lorsque quelque chose tourne.
Edit: Si vous ne vous souciez pas vraiment du terminal, vous pouvez simplement utiliser le drapeau hold de xterm:
xterm -e "mycommand" hold
Votre lanceur exécute un script, non?
A la fin de votre script, ajoutez
read -p "Press any key to exit > " -n1 junk
echo
Ensuite, votre script attendra jusqu'à ce que vous choisissiez de le terminer.
Dans votre raccourci .desktop, utilisez ceci
Exec=gnome-terminal -x bash -c "YOUR_SCRIPT; exec $Shell"
Une fois votre script terminé, le processus Bash se remplacera par une nouvelle invocation de lui-même.
Si vous devez transmettre des arguments entre guillemets à votre script, vous devez échapper les guillemets:
Exec=gnome-terminal -x bash -c "YOUR_SCRIPT \"arg with spaces\"; exec $Shell"
Une approche légèrement différente des autres réponses: exécutez votre commande et si cela échoue, créez un shell. De cette façon, vous n'avez pas à garder le terminal ouvert (ce qui ne fait pas la distinction entre le succès ou l'échec de la commande) et vous trouverez peut-être que ce shell est particulièrement utile en cas d'échec. Pour le fermer, utilisez simplement Ctrl-D (EOF), "exit", Alt-F4 (ou tout ce que votre gestionnaire de fenêtre utilise pour fermer les fenêtres), etc.
#!/bin/sh
[ $# -eq 0 ] && {
echo "$(basename $0): no command" >&2
exit 1
}
"$@" || {
echo "failed: $?"
exec $Shell
}
Placez ce fichier quelque part, tel que ~/bin, puis utilisez "success-or-Shell votre commande d'origine" dans votre programme de lancement.
Utilisez la commande watch
.
Format: watch -n60 myCommand
ou watch -n60 "my command string"
-n
a spécifié le nombre de secondes à attendre entre les appels à myCommand; ex: la commande ci-dessus appellera myCommand toutes les 60 secondes, pour toujours."my command string"
.Supposons que vous souhaitiez un programme de lancement qui affiche l'utilisation du disque et reste ouvert au lecteur. J'utiliserais simplement cette commande dans le lanceur:watch -n60 "df -h"
, qui appelle df -h
maintenant toutes les 60 secondes.
J'aime ceci sur la réponse acceptée de gnome-terminal -e "mycommand|less"
car je suis sous Xubuntu, qui utilise un terminal différent par défaut.
Cette réponse donne la meilleure réponse que j'ai vue jusqu'à présent pour faire ce que vous voulez. Ils recommandent de créer un script avec les commandes à exécuter et de l'utiliser avec le paramètre --init-file (spécifique à bash, mais vous pouvez probablement faire de même pour csh/tcsh/zsh, etc.):
#!/bin/bash --init-file
commands to run
... et l'exécuter comme:
xterm -e /path/to/script
# or
gnome-terminal -e /path/to/script
# or
the-terminal -e bash --init-file /path/to/script/with/no/Shebang