シェルスクリプト なぜかうまく実行できない!? 改行コードにご注意
シェルスクリプトが実行できない
自分の端末にある、Atomというエディタでスクリプトを書き、
WinSCPを使ってサーバ(Cent OS6.5)にアップロードし、
root ユーザで下記のように実行権限を与えた。
# chmod 755 /var/script/test.sh
よし、実行だ!・・・ん(・ω・)?
「そんなファイルは存在しません」って怒られた。
うーん、権限も付与されてるし、ファイルのコマンドにも間違いはなさそう。
一体なにが原因なのか分からず、お隣の先輩に見てもらった。
原因
先輩:「これ、改行コードが入ってるよ。これ消したらいけるよ。」
クローゼ:「え?そうなんです?どこに入ってるんです?」
先輩:「ファイルを開くときに "-b" オプションをつけると見えるよ。」
※"-b"は、ファイルをバイナリモードで開くこと
# vi /var/script/test.sh -b
なんと、一行ごとに『^M』が入ってる!!!
なんじゃこれー
対処
とにかく、『^M』を消さないと。
けど毎行入ってるので、一つずつ消すのは辛い。
そうか、置換すればいいのか!
# vi /var/script/test.sh -b
で、ファイルを開いた後に、viのコマンドモードで、
:%s/^M//g
と入力して [Enter] を押せば、一括で置換してくれました!
『^M』の入力方法に注意
これ、文字列じゃないんです。クローゼは間違たwww
コマンドモードで、次のように入力します。
- 『Ctrl+V』を押す
- 『Ctrl+M』を押す
スクリプトは無事に実行されました。
以上、本日の学びでした。