私がタイプすると:
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()関数はシェルまたはカーネルにリンクされていますか?