Shell Bash; commande de lecture; l'utilisation de Cygwin sous Windows 7
Ok, donc je vais avoir ce problème. J'écris un script à exécuter dans cygwin sous Windows. J'ai essayé un tas de base des scripts d'exemple dans le cas où il a été mes scripts problème.
J'ai donc essayé ceci:
#!/bin/bash
echo -e "Enter your name and press [ENTER]: \c"
read var_name
echo "Your name is: $var_name"
Puis je vais courir et je entrez un nom pour var_name.
J'obtiens ceci:
$ ./project1.sh
Enter your name and press [ENTER]: Jake
': not a valid identifierad: `var_name
Your name is:
Donc autant que je le comprends, je vais avoir un problème avec la lecture. Je suis en train de travailler sur un projet pour ma classe, mais je n'arrive pas à comprendre pourquoi il ne sera pas lu. J'ai suivi le livre sans triomphe alors eu recours à ces exemples sur le web qui ne semble pas fonctionner pour moi. Quelqu'un a une idée si c'est ma configuration ou si il me manque quelque chose, merci.
read NAME; echo $NAME
Merci. C'était un éditeur de problème. J'ai été en utilisant windows édition et l'enregistrement plutôt que de l'éditeur vi, donc je l'ai aujourd'hui. Merci pour la tester.
OriginalL'auteur CrazyGrunt | 2010-04-09
Vous devez vous connecter pour publier un commentaire.
Vous devriez faire une
od -xcb
sur ce script. Mon estimation est que c'est presque certainement va avoir le mauvais caractère de fin de ligne.La raison je suggère c'est parce que la ligne:
ressemble étonnament à deux lignes:
fusionnés (où le
.
caractères indiquent quelque chose qui a été remplacé).Que ce serait le cas si votre variable de cette ligne a été var_namecarriage-return plutôt que la plus normale
var_name
.Le fait que c'est Cygwin aussi points à cette conclusion, puisqu'il y a souvent de la difficulté lorsque vous modifiez vos scripts avec un Windows éditeur qui utilise des CR/LF où Cygwin attend juste de LF.
Je soupçonne que vous trouverez que de faire un
od -xcb
sur votre script en lui-même montre que vous avez les Fenêtres des fins de ligne sur un ou plusieurs de vos lignes de script.En fait, je viens de tester sous Ubuntu en mettant un
CTRL-M
à la fin seulement de laread
ligne et la sortie a été (légèrement modifiée pour afficher lesCTRL-M
):En d'autres termes, très similaire à ce que vous voyez.
Comme une part (maintenant que j'ai accès à mon environnement Cygwin), ce que vous voyez est la sortie:
où la deuxième ligne remplace le premier, donnant:
En d'autres termes, le mot étrange
identifierad
est en fait composé deidentifier
et la finalead:
deread:
. La raison, c'est uniquement similaire à mon exemple ci-dessus (par opposition à l'exact) c'est parce que le nom de votre fichier et le numéro de ligne sera différent pour mon petit script de test.Ou tout simplement utiliser vi, ${DIVINITÉ:-GreatGreenArkleseizure} prévu 🙂
Ok je l'ai réécrit en utilisant l'éditeur vi, a travaillé comme un charme. Alors, heureux d'avoir passé cette frustration obstacle, lol. Merci beaucoup.
OriginalL'auteur paxdiablo
vous pouvez simplement utiliser
read
à demander à l'utilisateur. Pas besoin de laecho
OriginalL'auteur ghostdog74