私がタイプすると:
ls --color=auto
または
ls --color=auto | cat
ls --color=auto > >(cat)
同じ出力が表示されません。したがって、プログラムには、そのSTDOUTが何かにパイプされているかどうかを知る能力があると思います。問題は、どのようにそれを知っているのですか?
私はENVのVARSを確認env
し、env | cat
私は同じことを取得します。答えはどこかにあります。どこがわからない。
この質問から、isatty()
この機能を提供する人を使用できることがわかりました。それはシェルまたはカーネルの一部ですか?さらに進むと、この関数はPOSIX標準の一部であることがわかります。
今、私はいくつかのメカニズムでそれらの間で通信できる2つのプロセスがあることを知っています:
- STDIN / STDOUT / STDERR
- 終了コード
- 環境変数
- システムコール
Bashとlsはどちらもプログラムです。したがって、リストされたメカニズムのみを使用して情報を交換できます。
この背後にある本当の質問はisatty()
、bashからどのように情報を取得するのですか?
isatty()
。質問を次のように変更する必要があります:isatty()
関数はシェルまたはカーネルにリンクされていますか?