Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/06/2011, 14h13   #1
Nouveau Membre du Club
 
Inscription : janvier 2011
Messages : 130
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 130
Points : 29
Points : 29
Par défaut Afficher les lignes en colonnes

Bonjour,

j’essaie d'afficher les lignes en colonne avec " ls -1": ceci fonctionne en mode console
mais lorsque je mets cette commande dans une variable, exemple: LS=$(ls -1) ou LS=`ls -1` et que je fais un echo $LS je n'ai pas d'affichage de colonne mais j'ai que des lignes !
Quelqu'un aurait une idée ?

Merci beaucoup

PS: Bien sûr je me pose cette question car je vais mettre ça dans un script
ghostrider95 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/06/2011, 14h53   #2
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 070
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 070
Points : 4 153
Points : 4 153
Bonjour,

utilise des guillemets !
echo "$LS"
et puis,utiliser ls dans un script est rarement une bonne idée, privilégie l'usage du développement des chemins* si possible.
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 30
Vieux 16/06/2011, 09h00   #3
Membre éprouvé
 
Avatar de ben.IT
 
Homme Benoît
Inscription : janvier 2009
Messages : 392
Détails du profil
Informations personnelles :
Nom : Homme Benoît
Âge : 24
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : janvier 2009
Messages : 392
Points : 438
Points : 438
hello,
N_BAH vient encore de m'apprendre quelque chose , après avoir cherché sur le développement de chemin, voici :
Citation:
Développement des chemins
Après le découpage en mots, à moins que l'option -f soit présente, bash recherche dans chaque mot les caractères *, ? et [. Si l'un d'eux apparaît, le mot est considéré comme un motif et remplacé par une liste, classée par ordre alphabétique, des noms de fichiers correspondant à ce motif.
Peux tu préciser ton précédent post, j'avoue utiliser parfois ls dans des scripts ...

merci d'avance,
ben
__________________
Meet the free software gang
ben.IT est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 16/06/2011, 09h51   #4
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 070
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 070
Points : 4 153
Points : 4 153
Je n'utilise jamais ls dans un script BASH.
si j'ai besoin de renseignements sur des fichiers, j'utiliserai plutôt stat, dont je peux contrôler complètement l'affichage, ainsi point de cut, sed, awk
si j'ai besoin de filtrer la liste, je peux utiliser les motifs génériques*, et les correspondances étendues* => grep
si j'ai besoin de la liste des fichiers d'un répertoires, j'utiliserai un tableau.

pour l'affichage en colonne : printf '%s\n' monRep/*
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 30
Vieux 16/06/2011, 15h47   #5
Membre éprouvé
 
Avatar de ben.IT
 
Homme Benoît
Inscription : janvier 2009
Messages : 392
Détails du profil
Informations personnelles :
Nom : Homme Benoît
Âge : 24
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : janvier 2009
Messages : 392
Points : 438
Points : 438
je me permets de répondre car c'est une problématique à laquelle je suis souvent confronté et j'aimerai faire ça le plus proprement possible (lister des fichiers générés et les traiter).

Citation:
si j'ai besoin de filtrer la liste, je peux utiliser les motifs génériques*, et les correspondances étendues* => grep
tu fais référence ici au caractères de plage [], au jeton n'importe quelle chaine '*' et au jeton n'importe quel caractère '?' ?

Citation:
si j'ai besoin de la liste des fichiers d'un répertoires, j'utiliserai un tableau.
Par exemple, j'ai une application qui tourne en crontab et qui va générer des fichiers résultats aux extension variées, disons .ext1, .ext2, .ext3

Donc si j'ai besoin de traiter la liste des fichiers générés ie les .ext1, .ext2, .ext3.
tu procéderais :
Code :
1
2
3
4
5
6
7
8
 
declare tab
for i in *ext[123]
do 
tab+=( $i )
done
 
#traitement du tableau ?
en quoi est ce mieux que :

Code :
1
2
3
4
5
 
for i in $(ls *ext[123])
do
#traitement de $i
done
Peux tu donner un exemple de ta manière ?

enfin pourrais tu donner un exemple de ta manière de procéder avec stat ?

merci d'avance,
ben
__________________
Meet the free software gang
ben.IT est déconnecté   Envoyer un message privé Réponse avec citation 11
Vieux 16/06/2011, 16h41   #6
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 070
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 070
Points : 4 153
Points : 4 153
Citation:
tu fais référence ici au caractères de plage [], au jeton n'importe quelle chaine '*' et au jeton n'importe quel caractère '?' ?
oui, ainsi que ce que permet l'option extglob.

Citation:
en quoi est ce mieux
d'abord, essaie avec des noms de fichiers qui comportent des espaces
ensuite :
Code :
1
2
3
4
5
6
7
8
shopt -s nullglob
mesFichiers=( *ext[1-3] )
#Affichage
(( ${#mesFichiers[@]} )) && printf "${mesFichiers[@]}"
#Traitement
for fichier in "${mesFichiers[@]}"
do #traitement sur fichier
done
si je veux n'afficher que le nom et la date de dernière modification des fichiers :
Code :
stat -c'%n %y\n' "${mesFichiers[@]}"
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 40
Vieux 16/06/2011, 17h08   #7
Membre éclairé
 
Avatar de FRUiT
 
Homme
Inscription : février 2011
Messages : 83
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 36
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2011
Messages : 83
Points : 326
Points : 326
Citation:
Envoyé par ben.IT Voir le message
en quoi est ce mieux que :
Parce que !
__________________
Neon Suite by FRUiT (kde4.6) http://tinyurl.com/yzm7cee
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean
FRUiT est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 16/06/2011, 17h14   #8
Membre éprouvé
 
Avatar de ben.IT
 
Homme Benoît
Inscription : janvier 2009
Messages : 392
Détails du profil
Informations personnelles :
Nom : Homme Benoît
Âge : 24
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : janvier 2009
Messages : 392
Points : 438
Points : 438
merci de ta réponse,
peux tu préciser le sens du test
Code :
(( ${#mesFichiers[@]} )) && printf "${mesFichiers[@]}"
notamment le dièse après l'accolade, je n'ai jamais utilisé cette écriture ...
merci,
Ben
__________________
Meet the free software gang
ben.IT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 17h41   #9
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Salut,

Citation:
Envoyé par ben.IT Voir le message
merci de ta réponse,
peux tu préciser le sens du test
Code :
(( ${#mesFichiers[@]} )) && printf "${mesFichiers[@]}"
notamment le dièse après l'accolade, je n'ai jamais utilisé cette écriture ...
merci,
Ben
man bash :

Code :
1
2
3
4
5
6
7
8
#
    Correspond au nombre de paramètres positionnels, en base décimale.

${#paramètre}
    Est remplacé par la longueur, en caractères, de la valeur du paramètre. 
    Si le paramètre est * ou @, la valeur est le nombre de paramètres positionnels. 
    Si le paramètre est un nom de tableau indexé par * ou @, la valeur est le nombre
    d'éléments dans le tableau
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 40
Vieux 17/06/2011, 09h18   #10
Membre éprouvé
 
Avatar de ben.IT
 
Homme Benoît
Inscription : janvier 2009
Messages : 392
Détails du profil
Informations personnelles :
Nom : Homme Benoît
Âge : 24
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : janvier 2009
Messages : 392
Points : 438
Points : 438
merci, pour vos super réponses.
ton lien est super FRUiT :
Citation:
Why you shouldn't parse the output of ls(1)
Je ne vois pas comment je pouvais espérer meilleur réponse à ma question.
en résumé :
NE PAS FAIRE :
Code :
1
2
3
4
 
for f in $(ls); do
 ...
done
MAIS PLUTOT :
Code :
1
2
3
4
 
for f in *; do
 ...
done
zipe31 merci à toi pour ton lien vers le man bash en français, je le garde sous le coude !

Ce genre de discussion me permet de grappiller des connaissances en bash qui me sont très utiles, c'est vraiment super, merci à vous les gars (ou les filles) !


à très bientôt,
ben
__________________
Meet the free software gang
ben.IT est déconnecté   Envoyer un message privé Réponse avec citation 01
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h14.


 
 
 
 
Partenaires

Hébergement Web