POSIXにおけるShebangの解釈についてのシェルショッカーとの議論まとめ

シェルスクリプトでは1行目にShebang(シバン)を書くことがある。 #!/bin/sh これがPOSIXに定義されているかどうかシェルショッカーが議論していた。参考になったのでまとめた。 また同じタイミングでPOSIXで定義されているCコンパイラーに関する話題もあったので一緒にまとめた。 続きを読む
13
前へ 1 2 ・・ 5 次へ
AoiMoe a.k.aしお兄P @AoiMoe

なんでそういう風になってるのか、というところがRationaleにちゃんと書かれるようになっただけ、最近のPOSIXは親切

2016-03-23 17:21:43
AoiMoe a.k.aしお兄P @AoiMoe

execp系の関数って昔からあんな規定だったかなあ

2016-03-23 17:22:55
AoiMoe a.k.aしお兄P @AoiMoe

まあでも、本来、わざわざ規格に「sh蹴るよ」とか書く必然性はないんだよな。関数インターフェースの定義としては蛇足といえば蛇足。

2016-03-23 17:35:11
AoiMoe a.k.aしお兄P @AoiMoe

exec*pを使う理由は必然性ではなくて利便性だと思う。PATHから探すのめんどいし、自分で/bin/sh蹴るのもめんどいから使う。必然性を問うならむしろ、そういう面倒くさいことが必要なexecveを使うことに対してなんじゃなかろうか

2016-03-23 17:59:19
AoiMoe a.k.aしお兄P @AoiMoe

しかし、あのRationaleに書いてある話、「ヒストリカルな実装」として「exec*p以外ではあらゆるシェルスクリプトをNOEXECとする実装」か「shebangを処理する実装」しか書いてないけど、後者はヒストリカルじゃないと思うのだが

2016-03-23 18:31:13
AoiMoe a.k.aしお兄P @AoiMoe

「同じファイルを食わせた時にENOEXECを返す関数と成功する関数がある」というところを、既存の実装に沿って詳細に規定するとああなるけど

2016-03-23 17:41:05
Kazuho Oku @kazuho

実際問題として、呼び出すプログラムが shell script かもしれない場合に exec[vl]e ではなく exec[vl]p を使うべき実用上の理由ってあるんでしょうか?

2016-03-23 17:42:30
mattn @mattn_jp

@kazuho shell script だと $PATH 検索してもらった方が何かと便利かと

2016-03-23 18:21:38
Kazuho Oku @kazuho

@mattn_jp パスが分かってる場合の話でふ

2016-03-23 18:28:26
SODA Noriyuki @n_soda

@kazuho 25年くらい昔はshebangがカーネル実装じゃないOSが残ってたのであったと思いますが、今はないような気がしますねえ。LinuxとOS Xと*BSDとSolarisは大丈夫ですが、AIXその他が今どうなってるかは知りません…でもさすがに大丈夫な気がします。

2016-03-23 17:50:19
Kazuho Oku @kazuho

@n_soda ありがとうございます気にしないことにします

2016-03-23 18:28:49

unspecifiedの解釈

SODA Noriyuki @n_soda

シェルショッカーの人、もう少し英語の読み方だけでも勉強した方がいいと思う

2016-03-23 16:35:56
成瀬 @nalsh

@n_soda それは英語じゃなくて規格書の読み方じゃないかなぁ。鼻から悪魔とか普通はどこで学ぶんでしょうね

2016-03-23 16:36:49
SODA Noriyuki @n_soda

@nalsh unspecified とか undefined とかは規格の専門用語なのでそうですね。ただ execvp()/execlp() のコマンドインタープリター呼び出しの規定に限って言うと、そこまで知らなくても中学英語文法+辞書程度で読み取れそうな気がします。

2016-03-23 16:41:00
SODA Noriyuki @n_soda

@nalsh 鼻から悪魔については、僕も本の虫で読むまで知らなかったので問題ないです(ぉ

2016-03-23 16:44:44
成瀬 @nalsh

@n_soda えっ、そださんとかそういうjargonだいたい知ってそうなのに

2016-03-23 16:46:06
森崎正人 @hutai

@n_soda @nalsh よこからごめん。 unspecified や undefined はCSでの計算可能性という概念を教える上では必須だとおもうんですがね。CEの世界だと、基礎の基礎概念をおしえらえていないので、これらの区別が付かないだけで。 [X41]

2016-03-23 16:50:18
SODA Noriyuki @n_soda

@hutai @nalsh う、(僕も専門別なので)計算可能性の方面での話は、PとかNPとかの解説で読んだかもしれませんが、すっかり忘れてます… ^^;

2016-03-23 16:57:08
森崎正人 @hutai

@n_soda ごめん。チューニングマシンと言ってしまっていいと思う。Computer ってなんでもできると思い込んでいる人が多いし、今はやりの囲碁のAIなど見ていると万能だと思いこんでいる人(工学での若手もね。)多そうだし。 cc: @nalsh [X41]

2016-03-23 16:59:51
成瀬 @nalsh

@n_soda @hutai 計算可能性という観点だとunspecifiedとundefinedって大差なかったりしませんか

2016-03-23 16:59:51
森崎正人 @hutai

@nalsh 計算可能性でも数学的な意味で定義可能ですよ。unspecified って計算可能な集合の外側だし、undefinedだと定義されていない状態が発生として教えれるし。これは、一見大差ないようで、厳密に区別できないとあと続かないし。 @n_soda [X41]

2016-03-23 17:04:46

英語の解釈に対する議論

SODA Noriyuki @n_soda

シェルショッカーの人、もう少し英語の読み方だけでも勉強した方がいいと思う

2016-03-23 16:35:56
ShellShoccar-jpn, a secret society @shellshoccarjpn

@n_soda ほう、自信満々に言うわけか。危険な奴め。ブーメランが刺さらんといいがな。

2016-03-23 19:03:28
前へ 1 2 ・・ 5 次へ