#1 Le 10/08/2012, à 20:23
- metalux
[Résolu]rétro-compatibilité d'un script
Bonjour,
J'ai fais un script pour choisir les mises à jour des dépôts que je souhaites automatiquement sans passer par le gestionnaire de mise à jour--->cf ma signature ou le script.
Celui-ci était fonctionnel sur Lucid et Maverick mais ne l'était plus sur Precise. J'ai réécrit partiellement celui-ci afin qu'il soit maintenant compatible et je viens récemment de m'apercevoir qu'il est compatible Ubuntu 10+ mais plus avec Lucid Lynx.
Une chose qui m'énerve particulièrement, pourquoi un script bash fonctionne sur une version et pas une autre? Une version marchant sur Lucid devrait marcher sur les version ultérieure alors que ce n'est pas forcément le cas.
Seul Maverick s'en est sorti peu importe la version du script.
Quelle est votre expérience dans l'utilisation des scripts? êtes-vous également confronté à ce phénomène?
Pour ceux qui pourrait m'éclairer sur la raison du blocage, voici ou Lucid bloque:
Je teste l'utilisateur avec
if [ ! "$SUDO_USER" ]; then
et j'effectue une série d'action en utilisateur puis je finis par
gksudo -k -m "blablabla" "$0"
exit 0
fi
afin de relancer le script en root tout en préservant l'environnement de l'utilisateur. Jusque là tout fonctionne. Le script se relance en root et passe donc à la suite avec l'affichage d'une fenêtre zenity, et là, patatra, Lucid ne continue pas le script. Des idées de la raison?
Dernière modification par metalux (Le 12/08/2012, à 00:55)
Hors ligne
#2 Le 11/08/2012, à 10:16
- compte supprimé
Re : [Résolu]rétro-compatibilité d'un script
Salut, tu peux essayer :
if [ "$UID" != "0" ] ; then
ou
if [ "$USER" != "root" ] ; then
à la place de "if [ ! "$SUDO_USER" ]; then"
Personnellement, je fais un test dans mes scripts en début pour savoir s'il a été lancé en root :
if [ "$UID" != "0" ]; then
if [ "$DISPLAY" == "" ] ; then
echo "Ce script doit être exécuté en tant que root !"
else
zenity --error --text="Ce script doit être exécuté en tant que root !"
fi
exit 1
fi
# reste du script execute en root !
C'est plus clair que de faire une partie user qui relance le script avec un gksudo.
#3 Le 11/08/2012, à 23:10
- metalux
Re : [Résolu]rétro-compatibilité d'un script
Bon, j'ai essayé tes 2 propositions et ça ne passe pas sur Lucid. Le script me demande bien le mot de passe mais il ne se passe rien ensuite. D'après le man, l'option -k existe déjà avec Lucid, ça devrait fonctionner sachant que ça passe sur Ubuntu 10.10 et +.
A moins que cette partie passe correctement et que c'est zenity qui bloque.
Voici la ligne en question:
action=$(zenity --list --radiolist --width=410 --height=210 --title="Mises à jour automatiques" --column="Choix :" --column="Action :" "" "Sélectionner la mise à jour de tous les dépôts" TRUE "Choisir les mises à jour autorisées" "" "Autres options") && [[ -n $action ]]
y vois-tu une erreur?
C'est plus clair que de faire une partie user qui relance le script avec un gksudo.
Ça oblige à relancer le script à partir d'un terminal avec sudo, c'est bien ça? Je ne souhaites pas passer par le terminal. J'effectue des actions en utilisateur dans la 1ère partie et en root dans la seconde, donc je ne souhaites pas le lancer entièrement en root.
Est-ce fréquent ces problèmes de compatibilité ou est-ce moi qui procède mal?
Hors ligne
#4 Le 11/08/2012, à 23:25
- compte supprimé
Re : [Résolu]rétro-compatibilité d'un script
C'est pas plutôt un pb de chemin du script ($0) ? Il est dans le path user et pas dans celui de root ?
#5 Le 11/08/2012, à 23:54
- metalux
Re : [Résolu]rétro-compatibilité d'un script
Je croyais que $0 correspondait au nom du script en respectant le chemin, est-ce bien le cas? Mais je doute que ça vienne de là, sinon le script ne fonctionnerait pas non plus sur les versions récentes d'Ubuntu .
As-tu déjà été confronté à un script qui n'était pas fonctionnel sur différentes versions d'Ubuntu?
Apparemment je semble être le seul vu l'absence de réactions à ma question
Quelle est votre expérience dans l'utilisation des scripts? êtes-vous également confronté à ce phénomène?
Hors ligne
#6 Le 12/08/2012, à 00:02
- compte supprimé
Re : [Résolu]rétro-compatibilité d'un script
Comment lances tu le script et se trouve-t-il ?
#7 Le 12/08/2012, à 00:18
- metalux
Re : [Résolu]rétro-compatibilité d'un script
Ça maaaaaaaaaaaaarche !
Et dire que je me prends la tête depuis un bon moment, tu viens de m'épargner une bonne migraine.
Quand tu m'as dis "Où se trouve-t-il?" , j'ai essayé en le mettant dans mon dossier utilisateur et là miracle! Le script se trouve dans ~/.gnome2/nautilus-scripts dans les 2 cas, pourquoi il ne trouve pas le chemin sur Lucid?
Hors ligne
#8 Le 12/08/2012, à 00:30
- compte supprimé
Re : [Résolu]rétro-compatibilité d'un script
Ca dépend comment le script est lancé (chemin absolu ou relatif ou sans chemin car dans le path user) car sudo ne peut se débrouiller qu'avec un chemin ou si le script est dans le path de root.
#9 Le 12/08/2012, à 00:54
- metalux
Re : [Résolu]rétro-compatibilité d'un script
Je ne suis pas sûr d'avoir tout bien compris(sans chemin car dans le path user???) mais sur Lucid le script n'est pas exactement dans ~/.gnome2/nautilus-scripts mais dans un sous dossier qui comprend un espace. Je penses que ça vient de là. J'ai protégé $0 avec des doubles quotes mais ça ne semble pas suffire. Après réflexion, j'ai déjà eu la même chose avec le script C dansl'air.....de cracolinux et je lui avais remonté le bug auquel il a apporté une correction. Je vais retourner analyser la correction qu'il a apporté.
Merci pour ton aide.
Hors ligne
#10 Le 12/08/2012, à 01:45
- metalux
Re : [Résolu]rétro-compatibilité d'un script
Résolu en remplaçant
gksudo -k -m "blablabla" "$0"
par
gksudo -k -m "blablabla" bash "$0"
afin que gksudo n'interprète pas un nom de dossier avec espace comme 2 dossiers distincts.
Hors ligne