私はNotepad ++を使ってWindowsでBashスクリプトを書いた。
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
アップロードして必要なファイル権限を設定したら、次のように実行してみます。
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.
質問: コードをkornシェルに変更したときも同じ問題に直面しました。行末に誤った文字が追加されたようです。
メモ: 解決策を見つけ、答えと同じ内容を投稿しました。同じ問題に直面する他の初心者に役立つように、自由に更新または改善してください。ありがとうございます!
ベストアンサー1
さまざまなフォーラムとスタックオーバーフローの投稿を検索した後、この問題が見つかりました。
以下は、エラーの根本原因をよりよく理解し、「確認」するための説明です。
まず、Windowsでコーディングする場合は、Notepad ++で武装することをお勧めします。私の考えでは、基本的にテキストエディタのスイス軍用ナイフです。
EOL(行末)文字やその他の制御記号を表示するには、次の手順を実行します。
1. Notepad++ でファイルを開きます。
メニューバーで、表示/記号の表示/すべての文字の表示を選択します。
これで、次の記号が表示されます。
ああ! Windows / MS-DOSでは、CR + LFを使用して行末を示します。 UNIXでは、LF文字を使用して行末文字(EOL文字)を表します。
2.1。 Windows EOLをUNIX EOLに変換してみましょう。
編集/EOL変換/UNIX形式を選択します。
次の内容が表示されます。
これは、行の末尾に「\ r」文字が追加される理由を説明します。これは、UNIXが「\n」またはLF(改行)を行出口/ EOL文字として認識しますが、「\ r」または^ M(キャリッジリターン)文字を無視するためです。
EOLの問題をテストすることもできます。
bash-3.00$ head myScript.sh | cat -vet | head -1
#usr/bin/bash^M$
bash-3.00$ #We see that ^M, that is \r is found at the end of each line.
2.2. WindowsでUNIXからUNIX EOL形式にファイルを変換する場合は、この問題を解決する2つの方法があります。
$ dos2unix myScript.sh
または
提供されたソリューションを使用してください@クリスダウン次のように:
$ sed -i 's/\r$//' myScript.sh
引用:
- 詳しくは行が終了しました そして rとnの違いは何ですかこのリンクを参照してください。