Problème avec $UID en root

Bonjour,

J’ai le petit problème suivant avec la debian 6.0.4:

Quand je suis connecté en root

En mode commande echo $UID renvoie bien 0

Avec un fichier sh simple comme :
#!/bin/bash

echo $UID

ne renvoie rien.

CA doit être un truc stupide mais je ne vois pas :017 … Si quelqu’un peut m’aider…

Comment est lancé le script ?
$ script
$ sh script

Est-ce que tu as rendu le script exécutable ?

$ chmod +x script

$PATH ?

$ script
$ /chemin/du/script
$ ./script

$ sh script
$ sh /chemin/du/script
$ sh ./script

Quelle sortie ?
affichage courant, variable,redirection vers fichier, pipe … ?

$ script=VARIABLE
$ script >fichier
$ script | processus

Le script est lancé avec sh script

Il s’exécute normalement. C’est le retour de $UID qui ne se fait pas correctement.

Pourtant en ligne de commande cela marche.

Vers quel shell pointe /bin/sh ?

Le shell de root ne serait-il pas dash ?
$UID est une variable de bash, dash ne le gère pas.

test :
$ echo $SHELL
/bin/bash
$ echo $UID
1000
$ dash
$ echo $UID

retour : 0, rien, niente, nada, nothing …

Même si le script commence par /bin/bash, le shell qui prévaut est celui de /bin/sh lorsque tu appelles
$ sh script

Il faut donc que tu rendes le script exécutable et que tu le lances sans le précéder de sh :

$ script

Un truc qui marche toujours quel que soit le shell :

UID=$(id -u) echo $UID

D’abord merci pour vos réponses.

Si je lance le script avec bash (et non sh) script cela marche. Le problème doit venir de là.

Comment je sais que le shell de root c’est dash et comment le changer?

Sinon j’ai essayer l’autre solution qui marche! :smiley:

Je réponds à ma question : utiliser chsh!

Pour que le problème ne se reproduise plus j’utilise la deuxième réponse!

Encore merci… Problème résolu!

Après quelques recherches le problème vient de la modification sur la dernière Debian (Squeeze) : dash est le nouveau shell par défaut … mais la ligne de commande reste en bash ce qui fait que la commande echo $UID marche en ligne de commande mais pas en script!

Il a été choisi car il permet théoriquement un boot plus rapide.

La syntaxe est donc différente et génère des problèmes pour les scripts écrits en bash.

Par exemple la ligne read -n 1 -p “Voulez-vous tester ? [y/N]” key plante en dash mais marche en bash!

Voir par exemple cette url : wiki.ubuntu.com/DashAsBinSh

On peut changer : wiki.debian.org/fr/DashAsBinSh?a … =fr%2FDash

cat /etc/passwd|grep root root:x:0:0:root:/root:/bin/bash

Notes hors sujet: oui pour je sais pour les UUOC mais je préfère cette forme d’écriture parce qu’il est + rapide de changer le terme cherché avec ce style d’écriture en rappelant l’historique de cde qu’en écrivant :

grep root /etc/passwd root:x:0:0:root:/root:/bin/bash
parce que pour modifier le terme cherché ( en l’occurence “root” ) on est + embêté qu’avec la première forme. Bref.

[quote=“Rantanplan aussi !”]
Notes hors sujet: oui pour je sais pour les UUOC mais je préfère cette forme d’écriture parce qu’il est + rapide de changer le terme cherché avec ce style d’écriture en rappelant l’historique de cde qu’en écrivant :

grep root /etc/passwd root:x:0:0:root:/root:/bin/bash
parce que pour modifier le terme cherché ( en l’occurence “root” ) on est + embêté qu’avec la première forme. Bref.[/quote]

Plus facile pour l’humain partisan du moindre effort, plus de boulot pour la machine.
Raccourcis au clavier, rappel de commande et édition :

ctrl+a aller en début de ligne
alt+f avancer d’un mot
alt+d effacer le mot remplacer
ctrl+e aller en fin de ligne

[quote=“etxeberrizahar”][quote=“Rantanplan aussi !”]
Notes hors sujet: oui pour je sais pour les UUOC mais je préfère cette forme d’écriture parce qu’il est + rapide de changer le terme cherché avec ce style d’écriture en rappelant l’historique de cde qu’en écrivant :

grep root /etc/passwd root:x:0:0:root:/root:/bin/bash
parce que pour modifier le terme cherché ( en l’occurence “root” ) on est + embêté qu’avec la première forme. Bref.[/quote]

Plus facile pour l’humain partisan du moindre effort, plus de boulot pour la machine.[/quote]
Je sais bien, mais qu’est-ce que ça peut bien faire lorsque la dite commande ne se trouve pas intensément appelée au sein d’une boucle ? dans le cas que je citais je ne vois vraiment pas la raison de s’embêter, par contre je suis d’accord qu’il faut avoir conscience de ce que tu viens de dire (+ de travail pour la machine donc ) et je remercie MisterFreez de m’en avoir fait prendre conscience (ça me sera utile pour écrire des scripts efficaces).

[quote=“etxeberrizahar”]
Raccourcis au clavier, rappel de commande et édition :

ctrl+a aller en début de ligne
alt+f avancer d’un mot
alt+d effacer le mot remplacer
ctrl+e aller en fin de ligne[/quote]
Oui, je connais bien (j’utilise ces raccourcis au quotidien), mais tu fais bien de les rappeler, j’ajoutes

Ctrl+<- reculer d’un mot (touche fléchée vers la gauche)
Ctrl±> avancer d’un mot (touche fléchée vers la droite)
Alt+shift+. (touche “point”) pour rappeler le dernier mot qui a été écrit à la fin de la dernière “phrase” depuis le dernier appuis sur la touche “Entrée” , continuer Alt+shift+. pour aller + loin dans cet historique un peu particulier ( c’est circulaire )

Le pb de alt+touche, c’est que dans un xterm, alt+f fait entrer dans le menu Fichier du xterm … et c’est #{[|^@}]#! bien sûr on n’a pas ces pbs dans un vrai terminal ctrl-alt+f1 par exemple

En fait il y a pas mal d’autres raccourcis de ce type que j’ai oublié ( notamment les subtilités de Ctrl-r pour une recherche dans l’historique complête)

Et je ne suis pas partisan du moindre effort, je suis partisan de la + grande fluidité si celle ci n’a aucune conséquence fâcheuse ( heu … mouis … :arrow_right: )