11
votes

Bash Test Counds "Echo: Commande introuvable"

OK, quelque chose de drôle arrive tout à coup. Ce test xxx pré>

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> xxx pré>

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 commentaires

Avez-vous essayer de double-citer $ i ?


Si vous remplacez la fin de la ligne avec echooooo 1 $; fait , donne-t-il une erreur echooooo: commande non trouvée ? 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 ?


Ajouter set -x 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.


4 Réponses :


1
votes

Que se passe-t-il lorsque vous courez simplement: xxx

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.

Aussi, essayez d'utiliser une instruction normale si au lieu du logique ou: xxx


2 commentaires

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.



3
votes

EDIT: Le code ci-dessous est toujours bien, mais le problème est probablement dans $ '\ 302 \ 240echo' : il semble y avoir caractères inconnu dans votre fichier texte . Essayez de supprimer les personnages de couple avant echo, puis de les taper à nouveau.

Cela pourrait bien être un problème citant. En outre, vous pouvez économiser du temps en évitant le chat : xxx


0 commentaires

0
votes

Fonctionne pour moi:

for f in $(< d2.lst); do [ -f ./d2/$f ] || echo $f ; done


0 commentaires

29
votes

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'


0 commentaires