Avec un lanceur pour une application de terminal, comment puis-je garder le terminal ouvert une fois le programme terminé?

24

J'ai une commande de terminal que j'exécute à partir d'un lanceur d'applications. Cela fonctionne très bien, mais parfois la commande échoue, donc j'aimerais que le terminal reste ouvert pour que je puisse voir les résultats. Comment puis-je faire ceci?

Eugene M
la source

Réponses:

23

En supposant que votre commande est appelée mycommand, je changerais mon lanceur pour exécuter 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. Modifiez l'option "Quand la commande se termine" en "Maintenez le terminal ouvert".

Lorsque vous exécutez des commandes, il doit maintenant laisser le terminal ouvert lorsque quelque chose s'exécute.

Edit: Si vous ne vous souciez pas vraiment du terminal, vous pouvez simplement utiliser le drapeau d'attente de xterm:

xterm -e "mycommand" hold
Oli
la source
7
Pour conserver l'action par défaut du terminal «lorsque la commande se termine», je suggère de créer un nouveau profil de terminal, de le définir pour qu'il reste ouvert après la sortie d'une commande et de passer l' --tab-with-profile=PROFILENAMEoption gnome-terminal . Vous pouvez avoir de nombreux profils pour différents comportements de cette façon :-)
inverser
1
xterm -hold -e mycommand
8

Votre lanceur exécute un script non?

À la fin de votre script, ajoutez

read -p "Press any key to exit > " -n1 junk
echo 

Ensuite, votre script attendra que vous choisissiez de le terminer.

Richard Holloway
la source
1
+1, et pour afficher l'invite uniquement si la commande échoue (retourne un code de sortie non nul), on pourrait le fairecommand || read -n1 -p "Command failed. Press any key to exit..."
Jukka Matilainen
8

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 passer des arguments entre guillemets à votre script, vous devez échapper aux guillemets:

Exec=gnome-terminal -x bash -c "YOUR_SCRIPT \"arg with spaces\"; exec $SHELL"
mivk
la source
3

Une approche légèrement différente des autres réponses: exécutez votre commande et si cela échoue, puis créez un shell. De cette façon, vous n'avez pas à garder le terminal ouvert (ce qui ne fait pas de distinction entre le succès ou l'échec de la commande), et vous pourriez trouver ce shell 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êtres utilise pour fermer les fenêtres), etc.

succès ou coquille

#!/bin/sh
[ $# -eq 0 ] && {
  echo "$(basename $0): no command" >&2
  exit 1
}
"$@" || {
  echo "failed: $?"
  exec $SHELL
}

Placez ce fichier quelque part, comme ~ / bin, puis utilisez "success-or-shell your original command" dans votre lanceur.


la source
0

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 pourriez probablement faire de même pour csh / tcsh / zsh, etc.):

#!/bin/bash --init-file
commands to run

... et exécutez-le 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
Brian Vandenberg
la source
0

Utilisez la watchcommande.

Format:, watch -n60 myCommandouwatch -n60 "my command string"

  • le -nnombre spécifié de secondes à attendre entre les appels à myCommand ; ex: la commande ci-dessus appellera myCommand toutes les 60 secondes, pour toujours.
  • Si la commande est plusieurs mots, mettre à l' intérieur des guillemets doubles: "my command string".

Disons que vous voulez un lanceur qui affiche l'utilisation du disque et reste ouvert pour que le lecteur puisse le voir. J'utiliserais simplement cette commande dans le lanceur:,
watch -n60 "df -h"qui appelle df -hmaintenant toutes les 60 secondes.

J'aime cela par rapport à la réponse acceptée gnome-terminal -e "mycommand|less"parce que j'utilise Xubuntu, qui utilise un terminal différent par défaut.

Gabriel Staples
la source
0

Essayez de cliquer avec le bouton droit sur le lanceur et de saisir les propriétés.

Il devrait y avoir une option pour garder la fenêtre du terminal ouverte entrez la description de l'image ici

Dans le fichier .desktop, il devrait y avoir l'entrée X-KeepTerminal=true

nathanfranke
la source