#1 Le 12/11/2008, à 04:04
- Goldy
$RANDOM innacessible en root dans mon script
Bonjour,
Je suis en train d'écrire un script nécessitant l'execution en root et utilisant la variable $RANDOM pour générer des chiffres aléatoires.
Le principe du script fonctionne, mais impossible de le lancer en root, la variable $RANDOM est vide.
Voilà pour vous montrer avec une ligne de débug qui echo $RANDOM au début du script
goldy@loli-pantsu:~/prog$ ./mac_changer
DEBUG random 4972
Bienvenue dans le programme de changement d'adresse MAC d'Aperture Science
Vous n'êtes pas root, execution du script en sudo
DEBUG random
Bienvenue dans le programme de changement d'adresse MAC d'Aperture Science
Vous êtes root
Veuillez sélectionner une option :
1. Changer l'adresse mac aléatoirement
2. Restaurer l'adresse mac matériel
Comment puis-je accéder à $RANDOM en root ?
Merci d'avance.
Dernière modification par Goldy (Le 12/11/2008, à 12:13)
Hors ligne
#2 Le 12/11/2008, à 08:53
- tiky
Re : $RANDOM innacessible en root dans mon script
Chez moi:
echo $RANDOM
fonctionne parfaitement en root.
Le problème vient de ton programme.
Conseil d'expert: il vous faut un dentifrice adapté...
Hors ligne
#3 Le 12/11/2008, à 11:26
- fugitif
Re : $RANDOM innacessible en root dans mon script
Idem
[11:25:56]~ root@ubuntu:~$ echo $RANDOM
22059
[11:25:57]~ root@ubuntu:~$ echo $RANDOM
5633
[11:25:58]~ root@ubuntu:~$ echo $RANDOM
28892
[11:25:58]~ root@ubuntu:~$ exit
exit
[11:26:10]~ fugitif@ubuntu:~$ echo $RANDOM
27694
Opteron 165 - 2Go DDR - Ubuntu Hardy - 32bits
Hors ligne
#4 Le 12/11/2008, à 12:07
- Goldy
Re : $RANDOM innacessible en root dans mon script
Effectivement, moi aussi ça me trouble, parce que lancé comme ça, ça fonctionne.
Pourtant, vous remarquez bien comme moi que l'execution du script affiche le nombre random et qu'il ne s'affiche plus une fois le script passé en root. Je me demande bien quel type d'erreur ça peut être.
Pour info, je copie la commande que j'ai écrite pour relancer le script en root
if [ $USER = root ]
then echo "Vous êtes root"
else
echo "Vous n'êtes pas root, execution du script en sudo"
sudo $0
exit
fi
Le problème est le même si je lance le script directement en root avec sudo. Il doit bien y avoir une explication à ce problème.
Le fait qu'il reconnaisse $USER montre que ce n'est pas un problème de path, mais uniquement $RANDOM, je vais essayer de faire d'autres scripts avec random dedans pour voir.
Dernière modification par Goldy (Le 12/11/2008, à 12:22)
Hors ligne
#5 Le 12/11/2008, à 17:26
- Goldy
Re : $RANDOM innacessible en root dans mon script
Je viens de faire de nouveau testes.
Le problème semble venir de sudo, j'ai crée un script simple :
#/bin/bash
#Test random
echo "Test de \$RANDOM"
echo
echo "\$RANDOM = $RANDOM"
Et voilà ce que j'obtiens en console
goldy@loli-pantsu:~/prog$ ./random
Test de $RANDOM
$RANDOM = 227
goldy@loli-pantsu:~/prog$ sudo ./random
Test de $RANDOM
$RANDOM =
goldy@loli-pantsu:~/prog$ sudo -s
root@loli-pantsu:~/prog# ./random
Test de $RANDOM
$RANDOM = 904
On vois que passer avec sudo, la variable $RANDOM est vide, par contre, une fois dans un terminal en root, alors la variable redevient valide.
Je pense qu'il s'agit vraisemblablement d'un bug, est-ce que quelqu'un peut essayer de lancer ce script pour vérifier ?
Hors ligne
#6 Le 12/11/2008, à 17:31
- seb0uil
Re : $RANDOM innacessible en root dans mon script
idem,
avec le script
$ ./test.sh
Test de $RANDOM$RANDOM = 11341
$ sudo ./test.sh
Test de $RANDOM$RANDOM =
alors que :
$ echo $RANDOM
25797
$ sudo echo $RANDOM
26709
Hors ligne
#7 Le 12/11/2008, à 17:32
- Goldy
Re : $RANDOM innacessible en root dans mon script
Je viens d'essayer avec l'option -s à sudo
goldy@loli-pantsu:~/prog$ sudo -s ./random
Test de $RANDOM
$RANDOM = 983
Et ça marche.
Donc visiblement, il faut utiliser -s à sudo pour lancer un script avec $RANDOM dedans. On dirait effectivement un bug.
Hors ligne
#8 Le 12/11/2008, à 17:36
- seb0uil
Re : $RANDOM innacessible en root dans mon script
Effectivement, d'ailleurs en affichant l'user dans le script, on a bien
$ ./test.sh
Test de $RANDOM
24313
User :
seb0uil
$ sudo ./test.sh
Test de $RANDOM
User :
root
$ sudo -s ./test.sh
Test de $RANDOM
22922
User :
root
ca fonctionne avec la variable $USER, mais pas avec $RANDOM (sans le -s )
Hors ligne
#9 Le 12/11/2008, à 17:42
- Goldy
Re : $RANDOM innacessible en root dans mon script
Je viens de tester sur une debian lenny et le problème n'est pas présent :
goldy@petite-loli:~/prog$ ./random
Test de $RANDOM
$RANDOM = 29665
goldy@petite-loli:~/prog$ sudo ./random
[sudo] password for goldy:
Test de $RANDOM
$RANDOM = 3257
Hors ligne
#10 Le 12/11/2008, à 18:01
- seb0uil
Re : $RANDOM innacessible en root dans mon script
Je viens de faire de nouveau testes.
Le problème semble venir de sudo, j'ai crée un script simple :
#/bin/bash #Test random echo "Test de \$RANDOM" echo echo "\$RANDOM = $RANDOM"
Le problème me semble plutot venir du script...
Finallement chez moi ca marche avec un
#! /bin/bash
sans quoi sudo utilise /bin/dash par defaut (il me semble) sur ubuntu, et ce dernier ne semble pas connaitre $RANDOM
$ /bin/dash
$ echo $RANDOM
$ /bin/bash
seb0uil@eeeXubuntu:/tmp$ echo $RANDOM
691
pour ce qui est du -s, le man nous indique
-s The -s (shell) option runs the shell specified by the SHELL envi‐
ronment variable if it is set or the shell as specified in
passwd(5).
et chez moi
$ echo $SHELL
/bin/bash
cqfd
Hors ligne
#11 Le 12/11/2008, à 18:03
- Goldy
Re : $RANDOM innacessible en root dans mon script
Effectivement... C'est moi qui avait oublié d'écrire convenablement l'en-tête du script.
...
J'avais ouvert un rapport de bug sur launchpad.... le fail.
Hors ligne
#12 Le 12/11/2008, à 18:06
- seb0uil
Re : $RANDOM innacessible en root dans mon script
en complément,un petit test (en ayant enlever la premiere ligne du script #! ... )
$ sudo ./test.sh
Test de $RANDOM
User :
root
$ ./test.sh
Test de $RANDOM
28626
User :
seb0uil
$ cd /bin
/bin$ ls -l sh
lrwxrwxrwx 1 root root 4 2008-02-06 00:42 sh -> dash
/bin$ sudo rm sh
/bin$ sudo ln -s bash sh
/bin$ ls -l sh
lrwxrwxrwx 1 root root 4 2008-11-12 18:03 sh -> bash
$ cd /tmp/
/tmp$ ./test.sh
Test de $RANDOM
23116
User :
seb0uil
/tmp$ sudo ./test.sh
Test de $RANDOM
24934
User :
root
c'est donc a priori bien ca !
Hors ligne
#13 Le 12/11/2008, à 18:14
- Goldy
Re : $RANDOM innacessible en root dans mon script
Oui, j'ai corrigé ça dans mon script, et ça fonctionne maintenant.
Ça faisait un moment que j'avais pas fait de script et j'avais oublié ce fondamental.
Hors ligne