[bash] Redirection ambigûe...

BlueWolf² Messages postés 45 Statut Membre -  
dubcek Messages postés 19021 Statut Contributeur -
Bonjour bonjour,

Voici rapidement mon problème : je travaille pour un TD sur un script dont le but est de mélanger un fichier et l'ajouter de façon mélangée à la fin de tous les fichiers .ext d'un dossier donné. Voici ci-dessous mon code source :

for i in /testdirectory/*.ext; do #@2
	if test "$i" != "$0" ; then #@3
		head -n 1 $0 | cat >> $i #@4
		RANDOM=$$ #@5
		tabft[18]=" " #@6
		nb1=0 #@7
		while [ $nb1 -ne 18 ]; do #@8
			valindex=$(((RANDOM % 18)+1)) #@9
			while [ "${tabft[$valindex]}" == "FT" ]; do #@10
				valindex=$(((RANDOM % 18)+1)) #@11
			done #@12
			ligne=$(head -$valindex $0 | tail -1) #@13
			tabft[$valindex]="FT" #@14
			echo $ligne | cat >> $i #@15
			nb1=$(($nb1+1)) #@16
		done #@17
	fi #@18
done #@19


Seulement, quand j'exécute le script, j'ai toujours une "ambiguous redirection" aux appels de $i lignes 4 et 15. J'ai tenté d'insérer un
echo $i
, et le chemin affiché est tout à fait correct. Cependant, l'erreur persiste. Si quelqu'un a une idée...

Merci par avance...

5 réponses

kiki
 
Bonjour,

je suis pas un spoécialiste en bash, loin de la la...
mais ligne 15 tu lanes un echo de $ligne, il t'affiche donc quelque chose que tu pipe vers un cat.
Hors le cat attend quelque chose à droite, et ça lui vient de la gauche...
Mois je pense que t'as pas besoin de la commande cat et du pipe pour ajouter ( >>) dans $i
En ligne 4 c'est peut etre aussi la commande cat qui est de trop...

En esperant avoir pu t'aider :-)

Cordialement,
0
BlueWolf² Messages postés 45 Statut Membre 12
 
Salut salut !

Bon, je n'avais pas pu faire les tests jusqu'à aujourd'hui. Je pensais que ta solution avait une chance de succès, mais en fait, ça ne change strictement rien à la sortie du truc...
0
jipicy Messages postés 41342 Statut Modérateur 4 896
 
Salut,

A tout hasard, est-ce que les noms desz fichiers dans ton répertoires contiennent des espaces ?

Sinon déjà pour commencer, exécutes ton script en mode débogage, rajoute la ligne "set -xv" après le "shebang (#! /bin/bash)...
0
BlueWolf² Messages postés 45 Statut Membre 12
 
Non, aucun espace.

Je me suis rendu compte de 2 choses (pour info, mon .ext était en fait un .sh) :
- si jamais il n'y a qu'un seul fichier .sh dans le testdirectory, ça passe comme une lettre à la poste ;
- si je fais "for i in *.bat", ça marche aussi sans problème.

C'est donc la solution que j'ai adoptée pour mon TD. Cela ne me dit pas d'où venait l'erreur, mais j'ai au moins la preuve que mon script fonctionne...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
dubcek Messages postés 19021 Statut Contributeur 5 637
 
si $ligne contient des caractères interprétés par le shell:
echo "$ligne" >> $i #@15
0