Ls dans un shel script

Résolu/Fermé
Utilisateur anonyme - 29 janv. 2009 à 11:43
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 29 janv. 2009 à 14:15
Bonjour,


Je fait un shellscript, où j'aimerai faire entrer dans une variable la liste du nom des fichier d'un dossier, un par ligne

sur le shell , je rentre " ls --format=single-column ", ça me sort la liste ligne par ligne, no problem

par contre , dans mon shellscript, si je fait

TRUC=`ls --format=single-column`
echo $TRUC

ou

echo $(`ls --format=single-column`)

ça me ressort la liste des fichiers a la suite, sur la meme ligne

donc sur ce coup la, je peux pas m'en servir pour faire une boucle for les boules

mais pouquoi don boudiou ??

j'ai essayer sur sh et bash
A voir également:

3 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
29 janv. 2009 à 11:46
Salut,

Essaie comme ça :
TRUC=$(ls -1)
echo "$TRUC"
C'est un UN et pas un "ELLE" minuscule !

;-))
0
Utilisateur anonyme
29 janv. 2009 à 14:07
Merci pour ta réponse, jipicy

Oui c'est vraiment etrange comme comportement :
rentré directement sur le shell debian, ls renvoi une ligne, tandis que un script avec :
echo "$(ls /)" (meme sans le -1 !!) me renvois bien mon tableau

en fait j'ai l'impression que mon soucis ne venais pas de ls proprement dis, mais de la sortie standard qui modifie les retour à la ligne sur certaine version de linux (par ex sur rhel5 no problem).

pour resoudre ça, soit se passer de la sortie standard pour remplir la variable ( comme plus haut), ou soit forcer un retour à la ligne du genre
echo -e $LIST '\n'
dans ma boucle for list in ...

bien sur, c'est BEAUCOUP plus propre et moins onéreux en ressource de se passer de la sortie standard

ouf !!!

@+!
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
29 janv. 2009 à 14:15
en fait j'ai l'impression que mon soucis ne venais pas de ls proprement dis, mais de la sortie standard qui modifie les retour à la ligne sur certaine version de linux (par ex sur rhel5 no problem).
En fait c'est au niveau des quotes (doubles) aurour de la variable que ça importe et apparemment du shell utilisé ;-\
jp@MDK:~/tmpfs ssh$ ls
a  b  c  d  e  f

jp@MDK:~/tmpfs ssh$ ls -1
a
b
c
d
e
f

jp@MDK:~/tmpfs ssh$ A=$(ls -1)
jp@MDK:~/tmpfs ssh$ echo $A
a b c d e f

jp@MDK:~/tmpfs ssh$ echo "$A"
a
b
c
d
e
f

jp@MDK:~/tmpfs ssh$
;-))
0