2011-12-21 14 views
8

印刷をパイプする際LSは異なる出力が得られない:はなぜ直接端末に

$ ls 
a.out avg.c avg.h 

配管cat

$ ls | cat 
a.out 
avg.c 
avg.h 

になぜlsは、宛先に基づいて異なる出力を与えるのでしょうか?

+0

FWIW、私はこの動作が壊れていると考えます。コマンドの巨大なパイプラインを簡単にまとめることができるという伝統的な伝統は、コマンドが別の場所に送られたときにそのコマンドが変更されたときはずっと難しくなります。 – paxdiablo

答えて

6

lsは、端末またはファイルに出力するかどうかを実際に判断できます(isattyライブラリコール)。コンソールを検出した場合は、コンソールをよりコンパクトにして見やすくしようとします。

+0

ウェブページを見つける:http://www.ginac.de/~kreckel/fileno – kev

6

lsは、パイプすると自動的にls -1のように動作します。

これは、行単位でlsの出力を扱いますので、あなたは、awklsまたはそのような何かをパイプしているとき、何をしたい通常です。

この既定の動作を無効にするには、ls -C | catを使用します。

+0

また、配管時に色を使用しません。ですからカラフルなエスケープコードが必要な場合は、 'ls -C --color = yes |ネコ。これは、 'ls -C --color = yes | less -R' –

1

各行が1つのエントリだけであるため、出力が期待されるように出力がパイプされているコマンドを許可します。例えば(あなたのls出力を与えられた)、以下はおそらくあなたが望むものではありません。

$ ls | sort -r 
a.out avg.c avg.h 

しかしsortは行ごとに複数の項目があった知らなかったので、それは何もできませんでした。実際に発生したものに、この比較:

$ ls | sort -r 
avg.h 
avg.c 
a.out 

あなたはls-Cを渡すことで(予想外の)最初の動作を実現することができます。

関連する問題