ls コマンドの動作は受信者によって異なります。

ls コマンドの動作は受信者によって異なります。

このようなコマンドは、標準出力がls何であるかをどうやって知ることができますか?

lsターゲット標準出力によって動作が異なるようです。たとえば、これを行うと:

ls /home/matt/tmp 

結果:

a.txt b.txt c.txt

しかし、もし私がそうするなら

ls /home/matt/tmp | cat

結果は次のとおりです(つまり、各結果は新しい行を置き換えます)。

a.txt
b.txt
c.txt

プロセスには、stdoutのファイル記述子1が渡されます。そうですか?結果の書式設定方法はどのように決定されますか?ファイル記述子は情報を漏洩していますか?

ベストアンサー1

このプログラムは、fd 1がttyか他のもの(パイプ、ファイルなど...)であるかを判断するlsために使用されます。isatty()からman 3 isatty

int isatty(int fd);

説明
このisatty()関数は、fd開かれたファイル記述子が端末を参照するかどうかをテストします。


修正する:coreutilsの行1538 ls.c(gitリビジョン43a987e1):

  if (isatty (STDOUT_FILENO))
    {
      format = many_per_line;
      /* See description of qmark_funny_chars, above.  */
      qmark_funny_chars = true;
    }

many_per_line自己説明が必要です。)

おすすめ記事