【初月無料キャンペーン中】gooドクター

以下の単純なシェルスクリプトを実行しようとしています。
-------------------
#!/bin/sh
echo ok
-------------------
そのとき、
bad interpreter: そのようなファイルやディレクトリはありません
と出てしまいます。

・which sh で確認すると /bin/sh です。
・Windowsで作ったファイルをFTPのアスキーモードで転送しています。

(ものすごく単純なミスをしてるのかもしれませんが、)
よろしくお願いします。

gooドクター

A 回答 (4件)

1行目の「/bin/sh」のうしろにCRが入っていると、このような現象が発生します。


FTPの転送モードが間違いなくアスキーモードになっているか、
転送後のファイルにCRがついていないかなど、再度確認してみてください。

CR以外のコントロールコードや全角スペースなどがついていても似た現象が起こります。
その場合はエラーメッセージが多少異なるはずですが、併せて確認しておくと良いかと思います。
    • good
    • 5

#2さんのCRに一票


改行コードが違う(1バイト多い)のだと思います

$ mv hoge.sh hoge.bk
$ tr -d '\r' < hoge.bk > hoge.sh
    • good
    • 4
この回答へのお礼

秀丸で改行コードをLFに変換し、
バイナリモードで転送するとうまくいきました。

CRがクセモノだったわけですね。

みなさん、ありがとうございました。

※素直にLinuxのエディタを勉強したほうがいいですね。。。

お礼日時:2007/06/25 17:01

ぱっと思いつく原因は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用の改行コードのままです。
    • good
    • 1

ただ単純にパスが通っていないだけだったりして...



パーミッションとパスを再度確認してください。
    • good
    • 3

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング