Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 hmm.
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 ! big_smile
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