web-dev-qa-db-ja.com

ls出力のファイル名間の魔法の区切り文字は何ですか?

ls(引数なし)の出力は、ファイル名を改行で区切っているように見えます。

証拠:

  • ls | grep fooは期待どおりに機能し、grepは各ファイル名を個別の入力行として扱います。

  • ls > files.txt; vim files.txt-> Vimでは、各ファイルは別々の行にあります

それでも、ターミナルでは、lsの出力により、複数のファイルが1行に配置され、ファイル名がスペースで区切られて、適切に配置された列が作成されます。

$ ls
a.txt  b.txt  c.txt

だから私の質問は、lsはこれをどのように行うのですか?

改行を「偽造」するために特別な制御文字を使用していますか?または、出力が別のコマンドにパイプされていることを認識しており、この場合は出力の形式を変えますか?

20
Chris B

または、出力が別のコマンドにパイプされていることを認識しており、この場合は出力の形式を変えますか?

はい。完全なマニュアルから(ドキュメントがインストールされている場合はinfo lsから入手可能):

標準出力が端末の場合、出力は列(垂直方向にソート)になり、制御文字は疑問符として出力されます。それ以外の場合、出力は1行に1つずつリストされ、制御文字はそのまま出力されます。

1列の出力が好きな場合は、実行できます

ls -1

ターミナルでも入手できます。

24

lsは、出力をパイプ処理するときにそれを検出します。あなたはそれをドキュメンテーションで見ることができます:

標準出力が端末の場合、出力は列(垂直方向にソート)になり、制御文字は疑問符として出力されます。それ以外の場合、出力は1行に1つずつリストされ、制御文字はそのまま出力されます。

パイプのリダイレクトに関係なく、出力内の各ファイルを別々の行に配置する場合は、次を使用できます。

ls -1
10
MilanorTSW