お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2010-01-30 03:00:47

satos
新しいメンバ
登録日: 2007-06-06

シェルスクリプトで/bin/bashが見つからない???

Ubuntu 9.04 Server Edition 32bit版にて、ターミナルからシェルスクリプトを実行したところ、
↓のメッセージが表示されました。

xxxx.sh: line 1: #!/bin/bash: No such file or directory

ただ、上記メッセージは表示するけど、スクリプトは正常に動作します。
正常に動作するのですが、なんだか気持ち悪いです。。。

which bash

で確認しても、/bin/bash は確実に存在するし、
別のサーバーで同一のスクリプトを実行したところ、上記メッセージは表示されないので、
全く見当がつきません。。。

何か原因が分かる方がいましたら、どうかご教示お願い致します。

オフライン

 

#2 2010-01-30 05:59:02

einundzwanzighundertsechs
メンバ
登録日: 2008-12-28

Re: シェルスクリプトで/bin/bashが見つからない???

原因が完全に判ったわけではありませんが...

まず,shebang 行(スクリプトの1行目)で存在しないファイルをインタープリタに指定した場合のメッセージは #1 とは異なります.

コード:

$ cat xxx.sh 
#!/bin/bas
echo Hello
$ ./xxx.sh
bash: ./xxx.sh: /bin/bas: bad interpreter: No such file or directory

#1 と同じメッセージはコメント文字 # をバックスラッシュでエスケープすると再現できます.
(この場合 #! はカレントディレクトリに存在するはずのディレクトリとみなされています)

コード:

$ cat xxx.sh
\#!/bin/bash
echo Hello
$ bash xxx.sh
xxx.sh: line 1: #!/bin/bash: No such file or directory
Hello

ですから問題のメッセージは,
「#!/bin/bash が #! も含めて実行ファイルへのパスと解釈されて実行されようとしたが見つからなかった.」
と読み取れます.

また,# の前にスペース以外の非表示文字が混入した場合も (例ではバックスペース = ASCII コード 8)

コード:

$ head -1 xxx.sh | od -c
0000000  \b   #   !   /   b   i   n   /   b   a   s   h  \n
0000015
$ cat xxx.sh
#!/bin/bash
echo Hello
$ bash xxx.sh 
xxx.sh: line 1:#!/bin/bash: No such file or directory
Hello

となります.(ただし,メッセージで # の前のスペースがなくなっています)

ともかく,問題のメッセージからは shebang行 に問題が有るように思えます.
とりあえず file コマンドで件の xxx.sh を調べてください.shebang行 が不正な場合 file コマンドは

コード:

$ file xxx.sh
xxx.sh: Bourne-Again shell script text executable

以外の結果 -- 例えば ASCII Text -- を返します.

オフライン

 

#3 2010-01-30 14:33:51

satos
新しいメンバ
登録日: 2007-06-06

Re: シェルスクリプトで/bin/bashが見つからない???

丁寧な説明、ありがとうございます。
file コマンドで件の xxx.sh を調べてみたところ、以下の結果が返ってきました。

コード:

$ file xxx.sh
xxx.sh: UTF-8 Unicode (with BOM) English text

shebang行が不正なようですが、これを解決するには、どうすればいいのでしょうか?
また、何故このような現象が発生するのでしょうか?(別のサーバーでは、本現象は発生しないので。。。)

お手数お掛けしますが、ご教示お願い致します。

オフライン

 

#4 2010-01-30 14:45:38

yama
メンバ
登録日: 2006-10-23

Re: シェルスクリプトで/bin/bashが見つからない???

なにで編集しましたか?
Windows環境で編集しましたか?
BOMが付いているのが問題なので、削れば直ります。

オフライン

 

#5 2010-01-30 15:31:52

einundzwanzighundertsechs
メンバ
登録日: 2008-12-28

Re: シェルスクリプトで/bin/bashが見つからない???

http://ja.wikipedia.org/wiki/UTF-8#.E3.83.90.E3.82.A4.E3.83.88.E9.A0.86.E3.83.9E.E3.83.BC.E3.82.AF
ですね.

オフライン

 

#6 2010-01-30 21:13:24

satos
新しいメンバ
登録日: 2007-06-06

Re: シェルスクリプトで/bin/bashが見つからない???

無事解決しました。ありがとうございました。

Windows環境で編集したときに、BOMが付いてしまったようです。
vi で以下のコマンドで BOM を取り除いたところ、件のメッセージは表示されなくなりました。

コード:

:set nobomb

別のサーバーでは、Windows環境で編集したものを使用してなかったため、
BOM が付かずに、件のメッセージが表示されなかったのだと思います。

この度は、本当に勉強になりました。ありがとうございました。

オフライン

 

Board footer

Powered by FluxBB