Ls dans un shel script

[Résolu/Fermé]
Signaler
-
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
-
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

3 réponses

Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 888
Salut,

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

;-))

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 !!!

@+!
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 888
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$
;-))