印刷をパイプする際LSは異なる出力が得られない:はなぜ直接端末に
$ ls
a.out avg.c avg.h
配管cat
$ ls | cat
a.out
avg.c
avg.h
になぜls
は、宛先に基づいて異なる出力を与えるのでしょうか?
印刷をパイプする際LSは異なる出力が得られない:はなぜ直接端末に
$ ls
a.out avg.c avg.h
配管cat
$ ls | cat
a.out
avg.c
avg.h
になぜls
は、宛先に基づいて異なる出力を与えるのでしょうか?
ls
は、端末またはファイルに出力するかどうかを実際に判断できます(isatty
ライブラリコール)。コンソールを検出した場合は、コンソールをよりコンパクトにして見やすくしようとします。
ウェブページを見つける:http://www.ginac.de/~kreckel/fileno – kev
ls
は、パイプすると自動的にls -1
のように動作します。
これは、行単位でls
の出力を扱いますので、あなたは、awk
へls
またはそのような何かをパイプしているとき、何をしたい通常です。
この既定の動作を無効にするには、ls -C | cat
を使用します。
また、配管時に色を使用しません。ですからカラフルなエスケープコードが必要な場合は、 'ls -C --color = yes |ネコ。これは、 'ls -C --color = yes | less -R' –
各行が1つのエントリだけであるため、出力が期待されるように出力がパイプされているコマンドを許可します。例えば(あなたのls
出力を与えられた)、以下はおそらくあなたが望むものではありません。
$ ls | sort -r
a.out avg.c avg.h
しかしsort
は行ごとに複数の項目があった知らなかったので、それは何もできませんでした。実際に発生したものに、この比較:
$ ls | sort -r
avg.h
avg.c
a.out
あなたはls
に-C
を渡すことで(予想外の)最初の動作を実現することができます。
FWIW、私はこの動作が壊れていると考えます。コマンドの巨大なパイプラインを簡単にまとめることができるという伝統的な伝統は、コマンドが別の場所に送られたときにそのコマンドが変更されたときはずっと難しくなります。 – paxdiablo