追加の背景について尋ねます。これ以前に質問して内容を理解したと思いましたが、これ以上ではありません。
私はecho
無視することを知っていますstdin
。私はstdin
、stderr
そしてstdout
存在することを知っており、この場合にはこれら以外の「事物」が存在することを知りません。
だからecho
ignoresならstdin
どこで入力を得るのですか?stdin
全体的な話は伝わってstdout
いないようですstderr
。
答え1
混乱した原因を私が理解したかどうかはわかりません。しかし、心に留めておいてください。Unixではコマンドライン引数(foo
およびbar
from echo foo bar
)と環境文字列(FOO=bar
from env - FOO=bar printenv
)は簡単です。コピーこれは、他のメモリと同様に(ポインタなどを介して)プロセスのアドレス空間でカーネルによってアクセスされます。標準のstdin、stdout、stderr、または追加のファイル記述子などのプロセスでは、読み書きできません。またはメモリマップされたファイルの転送。
これは自然法則ではなく、Unixで動作する方法にすぎません。これは間違いなく古く、一貫性がなく、非効率的です(全体またはほとんどを無視しても、プロセスごとに環境全体のコピーを作成します)。
さまざまな構成が可能です -計画9、環境文字列は実際にはファイルです/env
(これはプロセス間で共有される可能性があることを意味します)。
LD_PRELOAD
Linuxでは、ハッキングを使用してargv + env制限をバイパスすることもできますmemfd_create
。