OVH Cloud OVH Cloud

(ba)sh - ls et affectation de variables

12 réponses
Avatar
Thomas vO
bonjour,

je cherche =C3=A0 r=C3=A9cup=C3=A9rer le plus r=C3=A9cent fichier dans un r=
=C3=A9pertoire :

###begin bash code
#!/bin/sh

OLD=3D$(ls -t fic* |head -1)
CODE=3D$?
echo $CODE
if [ -s ${OLD} ];
then
echo "ok"
fi
###end bash code

le probl=C3=A8me, c'est quand ls ne renvoie rien (il n'existe aucun
fic*)... le code d'erreur est 0, puisque l'affectation fonctionne,
mais ce que je ne comprends pas, c'est que "[ -s rien ]" vaut Vrai
(m=C3=AAme combat avec "-e")... puisque =C3=A7a m'=C3=A9cho "ok".

si une bonne =C3=A2me peut m'expliquer :
1- pourquoi [ -s rien ] vaut vrai ?
2- comment faire =C3=A9chouer le test si $OLD vaut "rien".

merci beaucoup,

--=20
Thomas vO

2 réponses

1 2
Avatar
Thomas vO
bonjour,

À (at) Thu, 04 Dec 2008 03:30:21 +0100, Cyrille Lefevre
<cyrille.lefevre-news% nous disait (told
us):
Thomas vO a écrit :
###begin bash code
#!/bin/sh

OLD=$(ls -t fic* |head -1)
CODE=$?
echo $CODE
if [ -s ${OLD} ];
then
echo "ok"
fi
###end bash code

le problème, c'est quand ls ne renvoie rien (il n'existe aucun
fic*)... le code d'erreur est 0, puisque l'affectation fonctionne,



faux, le cr est celui de la commande soumise et non celui de
l'affectation.

$ x=$(false)
$ echo $?
1

dans le cas présent, c'est le cr de head qui est retourné et non
celui de ls puisqu'il s'agit d'un pipe, d'ou zero dans tous les
cas...



ok. maintenant, je comprends ; et évidemment, c'est tout à fait
logique...

merci !

--
Thomas vO
Avatar
Cyrille Lefevre
Cyrille Lefevre a écrit :

# attention à la ligne suivante !
$ rm fic*
$ x=$(ls fic*)
$ echo "$x"
fic*

il y a donc bien qqc



euh, la, j'ai fumé...
$ x=$(ls fic*)
ls: cannot access xxx*: No such file or directory
$ echo "$x"
=> rien, j'ai confondu avec echo fic* !

Cordialement,

Cyrille Lefevre.
--
mailto:Cyrille.Lefevre-news%
supprimer "%nospam% et ".invalid" pour me repondre.
1 2