[bash] Redirection ambigûe...

Fermé
BlueWolf² Messages postés 44 Date d'inscription vendredi 24 août 2007 Statut Membre Dernière intervention 28 août 2010 - 8 nov. 2007 à 17:54
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 - 11 nov. 2007 à 13:41
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

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 44 Date d'inscription vendredi 24 août 2007 Statut Membre Dernière intervention 28 août 2010 12
10 nov. 2007 à 17:04
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 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
10 nov. 2007 à 17:36
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 44 Date d'inscription vendredi 24 août 2007 Statut Membre Dernière intervention 28 août 2010 12
10 nov. 2007 à 18:14
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 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
11 nov. 2007 à 13:41
si $ligne contient des caractères interprétés par le shell:
echo "$ligne" >> $i #@15
0