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

Applications, problèmes de configuration réseau
Avatar de l’utilisateur
widapit
Maître du Kyudo
Messages : 1148
Inscription : mar. 30 mars 2010, 22:53
Localisation : Toulouse

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

Message 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 .
Dernière modification par widapit le sam. 22 nov. 2014, 00:56, modifié 1 fois.
routeur(OpenWRT); serveurs(Debian, Arch); cléUSB(Black-Arch);
mon ordi(Arch-hardened) = {spectrwm, zsh} || je m'amuse aussi avec des Arduino !
Avatar de l’utilisateur
benjarobin
Maître du Kyudo
Messages : 17239
Inscription : sam. 30 mai 2009, 15:48
Localisation : Lyon

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

Message 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"
Zsh | KDE | PC fixe : core i7, carte nvidia
Titre d'un sujet : [Thème] Sujet (état) / Règles du forum
Avatar de l’utilisateur
widapit
Maître du Kyudo
Messages : 1148
Inscription : mar. 30 mars 2010, 22:53
Localisation : Toulouse

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

Message 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:
routeur(OpenWRT); serveurs(Debian, Arch); cléUSB(Black-Arch);
mon ordi(Arch-hardened) = {spectrwm, zsh} || je m'amuse aussi avec des Arduino !
Avatar de l’utilisateur
FoolEcho
Maître du Kyudo
Messages : 10707
Inscription : dim. 15 août 2010, 11:48
Localisation : Basse-Normandie

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

Message 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).
«The following statement is not true. The previous statement is true.» :nage:
Avatar de l’utilisateur
widapit
Maître du Kyudo
Messages : 1148
Inscription : mar. 30 mars 2010, 22:53
Localisation : Toulouse

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

Message 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:
routeur(OpenWRT); serveurs(Debian, Arch); cléUSB(Black-Arch);
mon ordi(Arch-hardened) = {spectrwm, zsh} || je m'amuse aussi avec des Arduino !
Répondre