lsパイプはls -1と同じですか?

lsパイプはls -1と同じですか?

ls私が試したディレクトリとls|cat同じバイト出力を返しながら、複数の列の出力を返します。ls -1それでもls -1同じ答えが表示されますls -1|wc -l。選ぶ理由はありますかls -1...|cat出力が変わるのはなぜですかls

ベストアンサー1

ls出力が端末に送信されるかどうかをテストします。出力が端末に送信されない場合、これは-1デフォルト出力です。 (これは、またはオプションのいずれかにオーバーライドでき-Cます-m-x

したがって、lsパイプラインで使用し、他のオプションで上書きしない場合 ls-1POSIXではこれを要求するので、この動作を信頼できます。

POSIX仕様

出力が端末に送信されない場合、POSIX には-1デフォルト値が必要です。

POSIX仕様:

デフォルトの形式は、端末を除く、または-C、-m、または-xオプションのいずれかが指定されている場合を除いて、1行に1つの項目を標準出力にリストすることです。端末に出力する場合、フォーマットは実装によって定義されます。

デフォルトの単一列形式をオーバーライドする3つのオプションは次のとおりです。

-C は、
項目が照合順序に従って列ごとにソートされるマルチテキスト列出力を作成します。テキスト列数と列区切り文字は指定されていませんが、出力デバイスの特性に合わせて調整する必要があります。このオプションは長いフォーマット出力を無効にします。

-m
ストリーミング出力フォーマット。ページのパス名を<カンマ>文字と<空白>文字で区切ってリストします。次のリスト項目の行にスペースがない場合は、区切り文字シーケンスの後に<newline>文字をリストターミネーターとして使用します。このオプションは長いフォーマット出力を無効にします。


-xマルチテキスト列の出力が、以下ではなく複数の列にわたってソートされた項目から生成されることを除いて、-Cと同じです。このオプションは長いフォーマット出力を無効にします。

GNUドキュメント

~からGNU ls マニュアル:

'-1'
'--format=single-column'
1行に1つのファイルをリストします。これは、標準出力が端末でない場合のlsのデフォルト設定です。。ファイル名から直接改行出力を抑制するには、-bおよび-qオプションも参照してください。 [強調追加]

はい

3つのファイルを作成しましょう。

$ touch file{1..3}

出力が端末に到達すると、GNU はls複数列形式を使用することを選択します。

$ ls
file1  file2  file3

出力がパイプに移動する場合、POSIX仕様にはデフォルトで単一の列が必要です。

$ ls | cat
file1
file2
file3

基本的な単一列の動作をオーバーライドする 3 つの例外は、カンマで区切られ、列の下-mに並べ替えられ、-C複数の-x列にわたって並べ替えられます。

$ ls -m | cat
file1, file2, file3
$ ls -C | cat
file1  file2  file3
$ ls -x | cat
file1  file2  file3

おすすめ記事