bash test rendements “echo: command not found”
Ok, quelque chose de drôle qui arrive tout d'un coup. Ce test
for i in `cat /mnt/usb/liste.txt `; do [ -f /mnt/usb/lsdvd.xml/$i ] || echo $i; done
utilisées pour fonctionner correctement (pour chaque entrée dans le fichier liste.txt essayez de trouver un répertoire correspondant, imprimer le nom si non trouvé) et utilisé pour donner les noms de répertoires manquants. Maintenant cette commande rendements
echo: command not found
echo: command not found
echo: command not found
(...)
J'ai essayé à l'aide de [[...]] et "test" au lieu de " [ .. ]", mais en vain.
Aucune idées de ce qu'il serait arrivé avec mon bien-aimé bash alors que je n'étais pas à la recherche 🙂 ?
Grâce,
Christian.
Modifier (x sortie):
(...)
+ 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 ']'
+ $'20echo' THE_REBOUND
+ '[' -x /usr/lib/command-not-found ']'
+ /usr/bin/python /usr/lib/command-not-found -- $'20echo'
echo: command not found
+ return 127
(...)
avez-vous essayez de double-quote
Si vous remplacez la fin de la ligne avec
Ajouter
Mes conclusions: Double citant $i: en vain, même erreur. echoooo: command not found.
$i
?Si vous remplacez la fin de la ligne avec
echooooo $1; done
, donne-t-il une erreur echooooo: command not found
? Que "command not found" erreur est ce que j'obtiens quand j'type de courrier indésirable à une invite de commande de bash. Que faire si vous la remplacez par /bin/echo
?Ajouter
set -x
vers le haut de votre script et de regarder chaque commande que le shell exécute.Mes conclusions: Double citant $i: en vain, même erreur. echoooo: command not found.
OriginalL'auteur Christian | 2011-03-21
Vous devez vous connecter pour publier un commentaire.
Si vous regardez de près, vous verrez que c'est de l'impression:
avec un espace, au lieu de:
set -x
cela rend beaucoup plus claire lors de l'impression:0302 0240
est octal UTF-8 pour une l'espace insécable.Essayez de supprimer l'espace entre
|
etecho
et tapez un espace normal.Les Chances sont, le fichier a été modifié sur un Mac, où un espace de non-rupture peut être entré par accident, si vous appuyez sur la touche Option en même temps que Espace.
Si vous utilisez Vim, vous pouvez faire des espaces insécables plus évident à l'aide de la listchars option. Par exemple:
Voir Prise de Vim en évidence suspect caractères pour encore plus d'idées.
Sur Linux, l'espace insécable est soit Ecrire Espace Espace ou Ctrl+Maj+u0, de sorte que vous n'allez probablement pas le type que par accident.
Pour toute personne intéressée, il est possible de convertir manuellement les octal octets en UTF-8 à l'aide de la UTF-8 tableau de l'UTF-8 de l'article de Wikipédia.
Mais de loin la façon la plus simple que j'ai trouvé était à l'aide de Python:
OriginalL'auteur Mikel
Edit: Le code ci-dessous est toujours très bien, mais le problème est probablement dans
$'\302\240echo'
: Il semble y avoir caractères inconnus dans votre fichier texte. Essayez de supprimer les quelques caractères avant echo, puis en tapant de nouveau.Il pourrait bien être un citant question. Aussi, vous pouvez gagner du temps en évitant les inutile utilisation de
chat
:OriginalL'auteur l0b0
Ce qui se passe lorsque vous exécutez simplement:
Pour une chose, avez-vous remarqué quelque chose d'anormal dans les noms de fichiers (espaces, sauts de ligne, les caractères spéciaux, etc)? Si oui, vous aurez besoin de citer le nom du fichier à garder la coquille de mal l'interpréter.
Aussi, essayez d'utiliser une normale
if
déclaration au lieu de le OU logique:Le pour-si-alors-fi-faire de la boucle fonctionne bien, donc ça doit être quelque chose au sujet de la || et étrange non cotées dans les cordes, mais je n'arrive pas à trouver quelque chose d'inhabituel sur les fichiers et leurs noms.
OriginalL'auteur bta
Fonctionne pour moi:
Juste mes propres noms de fichiers, de répertoires, et a suggéré de construction $(...) au lieu de backticks, et avec <, au lieu de cat.
Peut-être un dos/windows saut de ligne dans votre liste? Vue avec
less
.OriginalL'auteur user unknown