しらいです。
In Message-Id <87hd8gzapd.wl%zn@xxxxxxxxxxxxx>
Kazuhiro NISHIYAMA <zn@xxxxxxxxxxxxx>さんwrites:
> 西山和広です。
> > 最初の一個の引数は有効でしょう。二個目以降が無視されるだけ
> > のことで。
>
> #!の行は空白の前までが実行ファイル名になって
> それ以降は空白も含めて1つの引数としてわたるだけ
> だと思っているのですが、無視される環境が
> あるのでしょうか?
Solaris8 は source が非公開なので実装から追うしかないので
すが、実際に試してみると確かにそうなりますよ。逆にそうならな
い環境ってのはどういう環境でしょうか?
$ uname -a
SunOS solaris9 5.9 Generic_118559-11 i86pc i386 i86pc
$ cat a.c
#include <stdio.h>
int
main(int argc, char** argv)
{
int i;
for (i=0; i<argc; ++i)
printf("%d:[%s]\n", i, argv[i]);
return 0;
}
$ gcc a.c
$ cat a
#!./a.out -a -b
$ cat b.c
#include <stdio.h>
int
main(int argc, char** argv, char** envp)
{
char *args[4];
args[0] = "a";
args[1] = "1";
args[2] = "2";
args[3] = NULL;
execve("./a", args, envp);
}
$ gcc -o b b.c
$ ./b
0:[./a.out]
1:[-a]
2:[./a]
3:[1]
4:[2]
$
shell が自身で「#!」を評価してしまうのを防ぐために、敢えて
execve() を使ってますが、確かに「-b」がどこかに消えてしまっ
てますね。
手元の Solaris8 環境はコピペしにくいところにあるので、上の
例では Solaris9 の実行例をあげましたが、8 や 10 も同様の結果
になります。
何なら OpenSolaris の source を紐解いても構いませんけど、
普通に一個目だけを評価するように実装されてると思いますよ。
> 以下のようなプログラムで確認しました。
確かに Linux kernel だとそうなりますけど、本当に Solaris8
環境で確認してますか?option か何かで変わるものなのかしらん。
$ uname -a
Linux yuka 2.4.31-0vl1.8 #1 2005年 9月 5日 月曜日 03:33:25 JST i686 unknown
(中略)
$ ./b
0:[./a.out]
1:[-a -b]
2:[./a]
3:[1]
4:[2]
$
しらい たかし
Follow-Ups:
- [linux-users:106106] Re: #!で始まるスクリプトSUZUKI Yasuhiro
- [linux-users:106114] Re: #!で始まるスクリプトKazuhiro NISHIYAMA
- [linux-users:106104] Re: #!で始まるスクリプトKazuhiro NISHIYAMA
- Prev by Subject: [linux-users:106104] Re: #!で始まるスクリプト
- Next by Subject: [linux-users:106106] Re: #!で始まるスクリプト
- Previous by thread: [linux-users:106104] Re: #!で始まるスクリプト
- Next by thread: [linux-users:106106] Re: #!で始まるスクリプト
- Indexes:[Main][Thread]