2010-12-02 45 views
1

Le script Ksh suivant me donne un message d'erreur "No tel file or directory" sur le système Red Hat Linux. Est-ce que quelqu'un a une solution?KSH pour la boucle fonctionne sur Solaris/Mac mais pas sur Red Hat Linux

#!/usr/bin/ksh 
for f in `cat files.dat` 
do 
    wc $f 
done 

Par exemple, files.dat dispose de 3 lignes de données et chaque ligne est un fichier dans le répertoire courant où le script est en cours d'exécution à partir. Remarque: la même chose pour la boucle a généré le même message d'erreur si elle s'exécutait également à partir de la ligne de commande.

Fonctionne sous Solaris/Mac mais pas sur le système Red Hat.

Merci.

+0

L'erreur "Aucun fichier ou répertoire de ce type" n'est-elle générée pour ksh ou pour files.dat? – crnlx

+0

L'erreur est pour a.c, a.h et b.c car 'cat files.dat' est équivalent à a.c.h b.c. – user527414

Répondre

0

Au lieu de for ... cat, vous devez utiliser

while read -r f 
do 
    wc "$f" 
done < files.dat 

Et vous devez utiliser $() au lieu de lorsque vous ne les apostrophes inverses devez effectuer la substitution de commande. Mais votre problème est probablement que les fichiers a.c, etc, ne sont pas là, ont des noms différents, des caractères invisibles dans leurs noms, ou les fins de ligne files.dat sont CR/LF (DOS/Windows-style) au lieu de \n (LF seulement - Unix-style) ou il y a des caractères impairs dans le fichier sinon.

+0

L'original files.dat a été créé à l'aide de la sortie redirect de la commande find, ce qui a provoqué l'erreur. J'ai vérifié le contenu de ce fichier en utilisant la commande "od -c" mais il n'y a pas de caractère bizarre. Quoi qu'il en soit, merci pour les réponses rapides. – user527414

0

Vous devriez correctement citer vos arguments, en d'autres termes, utilisez "$f", et non $f. A propos chat - il est surtout documenté ici: http://porkmail.org/era/unix/award.html

Ce qui est probablement mieux adapté est xargs -a thatfile wc.

+0

L'intention est d'utiliser egrep pour faire correspondre certains motifs sur $ f et rediriger la sortie de grep vers un fichier mais j'ai eu cette erreur. Ensuite, j'ai essayé de courir wc et j'ai eu la même erreur. Comme je n'ai pas accès à RH Box maintenant, je vais essayer "$ f" demain. Merci. – user527414