Ich verwende Notepad++ und gebe ein:
read s
echo "$s"
Die Ausgabe ist:
Und dann versuche ich ein Semikolon einzufügen:
read s;
echo "$s"
und die Ausgabe ist:
Ich speichere die Datei unter q.sh
und führe sie mit Cygwin aus, kann read
den Operator aber trotzdem nicht verwenden, was mich verwirrt. Ich habe vi
auch andere Editoren ausprobiert, aber die Ausgabe ist die gleiche.
Was ist falsch? Wie kann es funktionieren?
Antwort1
Die Textdatei, aus der das Shell-Skript besteht, wurde in Notepad++ geschrieben. Dieser Editor speichert Dateien standardmäßig als DOS-Textdateien, was aus Unix-Sicht einen überflüssigen Wagenrücklauf ( \r
) am Ende jeder Zeile bedeutet. Dies ist verwirrend sh
.
Es zu entfernen:
$ tr -d '\r' <q.sh >q-new.sh
$ mv q-new.sh q.sh
Das DrehbuchtutEs fehlt eine #!
-Zeile (wie in den Kommentaren erwähnt), aber solange Sie es mit einem expliziten Interpreter ( sh q.sh
) ausführen, ist dies nicht erforderlich.
Hinzufügen der Zeile
#!/bin/sh
würde (nach chmod +x q.sh
) dazu führen, dass sich die Ausführung als ./q.sh
genauso verhält wie die Ausführung mit sh q.sh
.
Antwort2
Eine weitere Möglichkeit, den Wagenrücklauf für Unix zu konvertieren, wenn Sie Zugriff auf Notepad++ haben. Gehen Sie in Notepad zu: Bearbeiten -> EOL-Konvertierung -> Unix (LF)
Auf Französisch heißt es: Edition -> Convertir les sauts de ligne -> Converti au format Unix (LF)
Es geht auch schneller.