J'ai un script bash que j'utilise pour automatiser une extraction SVN. Le contenu du dossier était:
#!/bin/bash
cd /var/www-cake
Sudo svn checkout file:///usr/local/svn/bash_repo/repo/
Ensuite, lorsque je double-cliquais sur le fichier, il me demandait quoi faire, je cliquais sur le bouton "Run In Terminal" puis un terminal apparaissait et me demandait le mot de passe Sudo. Je l'entrerais, le script s'exécuterait et le terminal se fermerait.
Je voulais donner une sorte d'indication que le script s'est déroulé avec succès, j'ai donc modifié mon fichier pour qu'il ressemble à:
#!/bin/bash
cd /var/www-cake
Sudo svn checkout file:///usr/local/svn/bash_repo/repo/
echo "Head revision has been pushed to live server"
Je m'attendais à ce que le terminal reste ouvert et me dise le message après. À ma grande surprise, il s'ouvre et se ferme immédiatement. Le script s'exécute et je n'ai plus à saisir le mot de passe Sudo.
Est-ce correct? Je ne comprends pas pourquoi cela se produit, semble être un problème de sécurité.
Sudo se souvient de votre mot de passe pendant un certain temps (15 minutes par défaut). Vous pouvez faire en sorte que Sudo oublie le mot de passe en exécutant Sudo -k
Que se passe-t-il lorsque vous exécutez le script directement à partir du terminal? Généralement, si le mot de passe Sudo a été saisi une fois mémorisé pendant 15 minutes. Si vous l'exécutez graphiquement, l'invite du terminal se fermera après une exécution complète. Je n'ai pas de dépôt SVN avec lequel jouer - cependant, j'ai fait un test similaire qui rassemblera les entrées d'un utilisateur et touchera un fichier de ce nom.
#!/usr/bin/env bash
echo -n "Hello, enter the file name: "
read NAME
touch $NAME
echo "All done"
Lorsqu'il est exécuté à partir du terminal:
Puis double-cliqué:
L'invite se ferme une fois terminée mais fait ce qui est demandé.
Pour garder l'invite ouverte après l'exécution d'un script, vous pouvez essayer deux choses:
read
comme dernière ligne.Pour créer un lanceur qui exécute une commande dans le terminal et maintient la fenêtre ouverte, créez un profil pour gnome-terminal, dites Hold, qui fait exactement cela (regardez les options de profil) et utilisez ce qui suit.
gnome-terminal --window-with-profile="Hold" -e "/path/to/script"