• ベストアンサー

シェルスクリプト実行で”そのようなファイルやディレクトリはありません”と出ます。

以下の単純なシェルスクリプトを実行しようとしています。 ------------------- #!/bin/sh echo ok ------------------- そのとき、 bad interpreter: そのようなファイルやディレクトリはありません と出てしまいます。 ・which sh で確認すると /bin/sh です。 ・Windowsで作ったファイルをFTPのアスキーモードで転送しています。 (ものすごく単純なミスをしてるのかもしれませんが、) よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Ceren
  • ベストアンサー率49% (90/183)
回答No.2

1行目の「/bin/sh」のうしろにCRが入っていると、このような現象が発生します。 FTPの転送モードが間違いなくアスキーモードになっているか、 転送後のファイルにCRがついていないかなど、再度確認してみてください。 CR以外のコントロールコードや全角スペースなどがついていても似た現象が起こります。 その場合はエラーメッセージが多少異なるはずですが、併せて確認しておくと良いかと思います。

その他の回答 (3)

回答No.4

#2さんのCRに一票 改行コードが違う(1バイト多い)のだと思います $ mv hoge.sh hoge.bk $ tr -d '\r' < hoge.bk > hoge.sh

innerfieldjp
質問者

お礼

秀丸で改行コードをLFに変換し、 バイナリモードで転送するとうまくいきました。 CRがクセモノだったわけですね。 みなさん、ありがとうございました。 ※素直にLinuxのエディタを勉強したほうがいいですね。。。

回答No.3

ぱっと思いつく原因は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)
回答No.1

ただ単純にパスが通っていないだけだったりして... パーミッションとパスを再度確認してください。

関連するQ&A