こんばんは。鈴木@埼玉県(在住)です。 しらいさんが試したのは、 On Sat, Jan 07, 2006 at 06:35:47PM +0900, Takashi SHIRAI wrote: ...(略)... > shell が自身で「#!」を評価してしまうのを防ぐために、敢えて > execve() を使ってますが、...(略)... ですので、execve()システムコールでも、'#! 〜〜'で始まる スクリプトファイルを実行させることができる、という ことですね。 出沢さんが[linux-users:106095] で、'#! 〜'の処理は シェルからカーネルに移ったというような発言をされて いますが、 # しらいさんの[linux-users:106094] でもそういう # 印象を受けます。 スクリプトファイルをコマンドラインなどで 実行する際に、まず初めに処理するのは、 相変わらずシェルではないでしょうか? # execve()で、スクリプトファイルを直接実行 # 可能であるとは知りませんでしたが。 bashのMANページは、 プログラムが #! で始まるファイルである場合、 最初の行の残りの部分はこのプログラムの インタプリタを指定します。シェルは指定された インタプリタをオペレーティングシステム上で 実行します。オペレーティングシステムは、 この実行可能フォーマットを直接処理しません。 インタプリタに対する引き数は、プログラムの 先頭の行のインタプリタ名の後の省略可能な引き 数 1 つと、その後のプログラム名、さらに (もしあれば) その後のコマンドへの引き数から 構成されます。 としています。 (参考) http://www.linux.or.jp/JM/html/GNU_bash/man1/bash.1.html また execve()システムコールでは、 "#! interpreter [arg]" という形式の行で始まる スクリプトでなければならない。後者の場合、 interpreter は適切な実行ファイルのパス名で なければならず、それ自身がスクリプトであっては ならない。そしてそれは interpreter [arg] filename の 形で呼び出される。 だそうです。 (参考) http://www.linux.or.jp/JM/html/LDP_man-pages/man2/execve.2.html 以上です。 ------------------------------------------------------------ 鈴木 康弘(SUZUKI Yasuhiro) yasu@xxxxxxxxxxx http://www31.ocn.ne.jp/~yswww/myself/
Follow-Ups:
- [linux-users:106107] Re: #!で始まるスクリプトTakeshi Kusune
- [linux-users:106108] Re: #!で始まるスクリプトSUZUKI Yasuhiro
- [linux-users:106110] Re: #!で始まるスクリプトdezawa
- [linux-users:106104] Re: #!で始まるスクリプトKazuhiro NISHIYAMA
- [linux-users:106105] Re: #!で始まるスクリプトTakashi SHIRAI
- Prev by Subject: [linux-users:106105] Re: #!で始まるスクリプト
- Next by Subject: [linux-users:106107] Re: #!で始まるスクリプト
- Previous by thread: [linux-users:106105] Re: #!で始まるスクリプト
- Next by thread: [linux-users:106107] Re: #!で始まるスクリプト
- Indexes:[Main][Thread]