OVH Cloud OVH Cloud

code de retour de ls

3 réponses
Avatar
Eric Jacoboni
Bonjour,

Je viens de constater un truc étrange :

Sous FreeBSD ou sous Linux :

$ ls fichier.inexistant
ls: fichier.inexistant: No such file or directory
$ echo $?
1

La même chose sous Darwin :

$ ls fichier.inexistant
ls: fichier.inexistant: No such file or directory
$ echo $?
0

Tout ça testé avec bash/ksh93/zsh.

J'ai bien vérifié que le message d'erreur était envoyé sur stderr et
que donc ls considérait bien comme une erreur de lui passer un fichier
inexistant. Alors, pourquoi ce code de retour de 0 qui indique un
succès ?
--
Éric Jacoboni, né il y a 1416947811 secondes

3 réponses

Avatar
Stephane Chazelas
2005-04-14, 20:41(+02), Eric Jacoboni:
[...]
$ ls fichier.inexistant
ls: fichier.inexistant: No such file or directory
$ echo $?
1

La même chose sous Darwin :

$ ls fichier.inexistant
ls: fichier.inexistant: No such file or directory
$ echo $?
0

Tout ça testé avec bash/ksh93/zsh.
[...]


Un .profile avec ls defini comme une fonction/alias?

Sinon, c'est un bug, ou du moins ce ls n'est pas SUS conformant.

Si tu as des doutes sur le shell, tu peux essayer:

perl -MPOSIX -le 'if (fork) {wait;print WEXITSTATUS($?)}
else {exec "/bin/ls", "zz"}'

ou un strace/ltrace/truss -u ou equivalent pour voir ce qui se
passe.

--
Stéphane

Avatar
Eric Jacoboni
Stephane Chazelas writes:

Un .profile avec ls defini comme une fonction/alias?


Argh... Un alias portant le nom d'une commande ? : vade retro satanas !

Sinon, c'est un bug, ou du moins ce ls n'est pas SUS conformant.


Je penche tout simplement pour un bug.

Si tu as des doutes sur le shell, tu peux essayer:


Vu que ça le fait quel que soit le shell et que j'utilise les
dernières versions d'iceux, je pense que le problème se situe dans
/bin/ls...

Je vais attendre de voir si la prochaine version de Darwin corrige le
tir, sinon j'aviserai...
--
Éric Jacoboni, né il y a 1416959724 secondes

Avatar
Stephane Chazelas
2005-04-14, 23:59(+02), Eric Jacoboni:
[...]
Vu que ça le fait quel que soit le shell et que j'utilise les
dernières versions d'iceux, je pense que le problème se situe dans
/bin/ls...
[...]


Ca pourrait etre la libc, les BSD-like ont tendance a avoir des
fonctions un peu trop evoluees dans la libc. ls utilise
peut-etre un fts(3) bogué par exemple.

--
Stéphane