Page 1 sur 1

[script bash] résultat de variable dans la commande suivante (résolu)

Publié : ven. 21 nov. 2014, 23:01
par widapit
Salut le forum !

Alors voilà, je suis en train de me préparer un 'petit' script et j'ai des difficultés sur une des fonctions, elle fait pas ce que je veux !!
Pour être sûr du coup, je l'ai isolée; c'est à dire que je l'ai recopiée dans un fichier test.sh que j'execute indépendamment et non plus en tant que fonction (je sais pas si je suis très clair là :mrgreen: ) .
Bref, voici le contenu du test.sh :

Code : Tout sélectionner

#!/bin/bash
#
# Variables
rouge="\e[0;31m"
vert="\e[0;32m"
jaune="\e[0;33m"
rose="\e[1;35m"
bleu="\e[0;34m"
blanc="\e[1;37m"
fin="\e[0m"

## the Test file

i="0"
rep_orig="/home/widapit/TEST"

for fichiers in $(ls $rep_orig)
do
		if [ -f $fichiers ]; then
				fichier[$i]=$fichiers
				let i++
		fi
done

les_fichiers=$(echo ${fichier[*]} | sed 's/\ /,/g')
a_lister="$rep_orig/{$les_fichiers}"

echo -e $jaune " Les fichiers présents = $les_fichiers " $fin

echo -e $rouge " Pourquoi 'ls' ne reconnait pas le nom de fichier/dossier ?? " $fin

ls "$a_lister"

## End
Le problème, c'est que le echo $les_fichiers m'affiche le bon résultat mais ls me retourne le message d'erreur :

Code : Tout sélectionner

$ ls: impossible d'accéder à /home/widapit/TEST/{test.php,test.txt}: Aucun fichier ou dossier de ce type
Là où je ne comprend pas, c'est que si je fait un

Code : Tout sélectionner

$ ls /home/widapit/TEST/{test.php,test.txt}
la commande renvoie bien

Code : Tout sélectionner

$ /home/widapit/TEST/test.php  /home/widapit/TEST/test.txt
et ceci, même si je tape 'ls' et copie-colle le reste depuis le résultat du script ou depuis le message d'erreur.

Une idée de ce que j'ai loupé ? :?
Mais aussi j'aimerais surtout comprendre pourquoi ces comportements différents ...

Merci à tous .

Re: [script bash] résultat de variable dans la commande suivante

Publié : ven. 21 nov. 2014, 23:23
par benjarobin
Ceci est un comportement tout à fait logique...
La chaine de caractère n'est évaluée qu'une seule fois, pas 2 fois de suite.

Je pense que tu t'y prend mal. Après tu peux toujours utiliser la commande : eval pour évaluer une 2ième fois, mais je ne le recommande pas du tout.

Je ne sais pas ce que tu veux faire mais par exemple tu peux faire la même chose en 1 seule ligne, 2 exemples :

Code : Tout sélectionner

ARRAY_FILES=(`find /home/widapit/TEST/ -maxdepth 1 -type f`)
STR_FILES=$(find /home/widapit/TEST/ -maxdepth 1 -type f)

# Ce qui donne 
echo "$ARRAY_FILES[@]"
echo "$STR_FILES"

Re: [script bash] résultat de variable dans la commande suivante

Publié : sam. 22 nov. 2014, 00:56
par widapit
yop,

merci pour ta(tes) réponse(s) benjarobin ... mais en fait, j'ai pigé ce que tu disais et trouvé une solution avant que tu édites ! :)

Code : Tout sélectionner

#!/bin/bash
#
# Variables
rouge="\e[0;31m"
vert="\e[0;32m"
jaune="\e[0;33m"
rose="\e[1;35m"
bleu="\e[0;34m"
blanc="\e[1;37m"
fin="\e[0m"

## the Test file

i="0"
rep_orig="/home/widapit/TEST"

les_fichiers ()
{
		fichier=

		for fichiers in $(ls $rep_orig)
		do
				 if [ -f $fichiers ]; then
						fichier[$i]=$fichiers
						ls $rep_orig/${fichier[$i]}
						let i++
				fi
		done
}

echo -e $jaune " Les fichiers présents = " $fin

les_fichiers

## End

Par contre, j'ai quand même essayé ce que tu proposes et ton premier exemple ne me renvoi que le premier fichier de la liste et le second me donne tous les /.* en plus
mais bon, maintenant, à moi de retravailler avec tout ça !
Je vais pouvoir débloquer mon problème initial, je passe donc en résolu .

Merci encore . :chinois:

Re: [script bash] résultat de variable dans la commande suivante (résolu)

Publié : sam. 22 nov. 2014, 09:58
par FoolEcho
:idea: Juste pour info sur ton bout de code: inutile de réinventer la roue car tu peux obtenir la coloration syntaxique voulue en sortie directement avec ls (cf. man ls et dircolors).

Re: [script bash] résultat de variable dans la commande suivante (résolu)

Publié : sam. 22 nov. 2014, 11:16
par widapit
pff... ouais , je sais ! :lol: ... j'ai même un alias pour ls et grep avec --color=auto dans mon .bashrc !!
je devais être peintre dans une autre vie, et j'ai gardé l'habitude de remettre une couche !!!

non, plus sérieusement, c'est surtout pour colorer les phrases qui apparaissent avant la sortie de ls .

Merci quand même d'avoir pris la peine de le signaler :chinois: