- ベストアンサー
シェルスクリプト実行で”そのようなファイルやディレクトリはありません”と出ます。
以下の単純なシェルスクリプトを実行しようとしています。 ------------------- #!/bin/sh echo ok ------------------- そのとき、 bad interpreter: そのようなファイルやディレクトリはありません と出てしまいます。 ・which sh で確認すると /bin/sh です。 ・Windowsで作ったファイルをFTPのアスキーモードで転送しています。 (ものすごく単純なミスをしてるのかもしれませんが、) よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
1行目の「/bin/sh」のうしろにCRが入っていると、このような現象が発生します。 FTPの転送モードが間違いなくアスキーモードになっているか、 転送後のファイルにCRがついていないかなど、再度確認してみてください。 CR以外のコントロールコードや全角スペースなどがついていても似た現象が起こります。 その場合はエラーメッセージが多少異なるはずですが、併せて確認しておくと良いかと思います。
その他の回答 (3)
- tux_the_penguin
- ベストアンサー率42% (69/163)
#2さんのCRに一票 改行コードが違う(1バイト多い)のだと思います $ mv hoge.sh hoge.bk $ tr -d '\r' < hoge.bk > hoge.sh
- umasikajiro
- ベストアンサー率67% (545/803)
ぱっと思いつく原因は2つ 例えばfile名が test.sh だとして 1. Windowsと違ってカレントディレクトリは通常pathが通っていませんので test.shの有るディレクトリから実行させる場合も $ test.sh <=これだと駄目 $ ./test.sh <=これならOK 2.アスキーモードで転送したはずがうっかり間違えていた この場合 1行目のshebang文は #!/bin/sh\r\n となり /bin/sh[CR]を探しに行きますが当然有りませんので エラーになります これを確認するためにはコマンドラインで $ od -c ./test.sh と打つと 0000000 # ! / b i n / s h \n e c h o o 0000020 k \n これならOKですが \r が入っていれば Windows用の改行コードのままです。
- DT200
- ベストアンサー率38% (63/164)
ただ単純にパスが通っていないだけだったりして... パーミッションとパスを再度確認してください。
お礼
秀丸で改行コードをLFに変換し、 バイナリモードで転送するとうまくいきました。 CRがクセモノだったわけですね。 みなさん、ありがとうございました。 ※素直にLinuxのエディタを勉強したほうがいいですね。。。