OK, quelque chose de drôle arrive tout à coup. Ce test utilisé pour fonctionner correctement (pour chaque entrée du fichier liste.txt, essayez de trouver un répertoire correspondant, imprimez le nom si non trouvé) et utilisé pour donner le nom des annuaires manquants . Maintenant, cette commande cède p> J'ai essayé d'utiliser [[...]] et "Test" au lieu de "[..]" mais en vain. p> Des idées Ce qui aurait pu se passer avec ma bash bien-aimée pendant que je ne cherchais pas :)? P> Merci,
Christian. P> Edit (SET -X SORTIE): P> (...)
+ for i in '`cat /mnt/usb/liste.txt`'
+ '[' -f /mnt/usb/lsdvd.xml/THE_GHOST_WRITER.lsdvd.xml ']'
+ for i in '`cat /mnt/usb/liste.txt`'
+ '[' -f /mnt/usb/lsdvd.xml/THE_IMAGINARIUM_OF_DOCTOR_PARNASSUS.lsdvd.xml ']'
+ for i in '`cat /mnt/usb/liste.txt`'
+ '[' -f /mnt/usb/lsdvd.xml/THE_INFORMANT.lsdvd.xml ']'
+ for i in '`cat /mnt/usb/liste.txt`'
+ '[' -f /mnt/usb/lsdvd.xml/THE_INTERNATIONAL.lsdvd.xml ']'
+ for i in '`cat /mnt/usb/liste.txt`'
+ '[' -f /mnt/usb/lsdvd.xml/THE_MEN_WHO_STARE_AT_GOATS.lsdvd.xml ']'
+ for i in '`cat /mnt/usb/liste.txt`'
+ '[' -f /mnt/usb/lsdvd.xml/THE_OTHER_MAN.lsdvd.xml ']'
+ for i in '`cat /mnt/usb/liste.txt`'
+ '[' -f /mnt/usb/lsdvd.xml/THE_QUEEN.lsdvd.xml ']'
+ for i in '`cat /mnt/usb/liste.txt`'
+ '[' -f /mnt/usb/lsdvd.xml/THE_READER.lsdvd.xml ']'
+ for i in '`cat /mnt/usb/liste.txt`'
+ '[' -f /mnt/usb/lsdvd.xml/THE_REBOUND.lsdvd.xml ']'
+ $'\302\240echo' THE_REBOUND
+ '[' -x /usr/lib/command-not-found ']'
+ /usr/bin/python /usr/lib/command-not-found -- $'\302\240echo'
 echo: command not found
+ return 127
(...)
4 Réponses :
Que se passe-t-il lorsque vous courez simplement: Pour une chose, remarquez-vous quelque chose d'anormal sur les noms de fichiers (espaces, nouvelles lignes, caractères spéciaux, etc.)? Si tel est le cas, vous devrez citer le nom de fichier pour empêcher la coquille de l'interpréter mal. P> Aussi, essayez d'utiliser une instruction normale si code> au lieu du logique ou: p>
La boucle simple pour l'écho fonctionne bien, rien d'inhabituel des noms de fichiers. En fait, les sont assez gentils: pas d'espaces, pas même des chiffres.
La boucle FOR-IF-FI-FI fonctionne bien, il doit donc être quelque chose sur le || et étranges cordes non cotées, mais je ne peux pas sembler trouver quelque chose d'inhabituel sur les fichiers et leurs noms.
EDIT: Le code ci-dessous est toujours bien, mais le problème est probablement dans Cela pourrait bien être un problème em> citant. En outre, vous pouvez économiser du temps en évitant le chat code> A>: p> $ '\ 302 \ 240echo' code>: il semble y avoir caractères inconnu fort> dans votre fichier texte . Essayez de supprimer les personnages de couple avant echo, puis de les taper à nouveau.
Fonctionne pour moi:
for f in $(< d2.lst); do [ -f ./d2/$f ] || echo $f ; done
Si vous regardez de près, vous verrez que c'est l'impression:
>>> import unicodedata >>> unicodedata.name('\302\240'.decode('utf-8')) 'NO-BREAK SPACE'
Avez-vous essayer de double-citer
$ i code>?
Si vous remplacez la fin de la ligne avec
echooooo 1 $; fait code>, donne-t-il une erreur
echooooo: commande non trouvée code>? L'erreur "Commande non trouvée" est ce que j'obtiens lorsque je tape Junk à une invite de commande Bash. Et si vous le remplacez par
/ bin / echo code>?
Ajouter
set -x code> en haut de votre script et regarder chaque commande que la coque exécute.
Mes résultats: Double citant $ I: Pas de disponibilité, même erreur. Echoooo: commande introuvable.