Ich habe ein Bash-Skript in Windows mit Notepad ++ geschrieben.
cxStopAllServicesOnSERVER.sh
#!/usr/bin/bash
cd "/some/path"
echo "Hi. Logs can be found at "`pwd`"/cxStartStopLogger.log"
echo "["`date`"]*** STOPPING ALL SERVICES ON SERVER ***" >> "cxStartStopLogger.log"
exit
Nachdem ich es hochgeladen und die erforderlichen Dateiberechtigungen festgelegt hatte, habe ich versucht, es wie folgt auszuführen:
bash-3.00$ cat cxStopAllServicesOnSERVER.sh #Let's have a look at the code.
#!/usr/bin/bash
cd "/some/path/"
echo "Hi. Logs can be found at "`pwd`"/cxStartStopLogger.log"
echo "["`date`"]*** STOPPING ALL SERVICES ON SERVER ***" >> "cxStartStopLogger.log"
bash-3.00$ # Code and hashbang 'looks' correct,
bash-3.00$ # if there is any issue with the format (EOL characters and such)
bash-3.00$ # we cannot see it using cat.
bash-3.00$
bash-3.00$ sh cxStopAllServicesOnSERVER.sh
cxStopAllServicesOnSERVER.sh[2]: /some/path^M: not found
Hi. Logs can be found at /some/path/cxStartStopLogger.log
bash-3.00$ # Note that ^M appears at the end of the line.
bash-3.00$ bash -x cxStopAllServicesOnSERVER.sh
+ cd $'/some/path\r'
: No such file or directory1.sh: line 2: cd: /some/path
++ pwd
' echo 'Hi. Logs can be found at /some/path/cxStartStopLogger.log
Hi. Logs can be found at /some/path/cxStartStopLogger.log
++ date
+ echo '[Sun' Nov 18 00:28:17 EST '2012]*** STOPPING ALL SERVICES ON SERVER ***'
bash-3.00$ # Note that '\r' return character appears at the end of the line.
Problem: Wenn ich den Code in Korn Shell ändere, habe ich das gleiche Problem. Es scheint, dass am Ende der Zeile ein falsches Zeichen hinzugefügt wird.
HINWEIS: Ich habe die Lösung gefunden und dieselbe als Antwort veröffentlicht. Fühlen Sie sich frei, es zu aktualisieren oder zu verbessern, um anderen Anfängern zu helfen, die möglicherweise mit dem gleichen Problem konfrontiert sind. Vielen Dank!
pico
, wird der Befehlszeileneditor die Lösung sein.Ihr Skript enthält CRLF-Zeilenenden, während Unix LF-Zeilenenden verwendet. Das Folgende entfernt sie, wenn Sie GNU haben
sed
:Wenn Sie kein GNU haben
sed
, schreiben Sie in eine temporäre Datei und verschieben Sie sie über die alte Datei.Nebenbei bemerkt, wenn Sie ein Skript mit aufrufen
sh
, überschreiben Sie den Shebang. Das ist wahrscheinlich nicht was du willst.quelle
dos2unix
Tool ist auch einen Vorschlag wert.!/
muss in die erste Zeile eingefügt werden, um eine zu haben.