Який магічний роздільник між назви файлів у вихідному лс?


20

Виведення ls(без аргументів), як видається, розділяє назви файлів з рядковими розривами.

Докази:

  • ls | grep fooпрацює, як очікувалося, grepтрактуючи кожне ім'я файлу як окремий рядок введення.

  • ls > files.txt; vim files.txt -> у Vim кожен файл знаходиться в окремому рядку

І все ж у терміналі виведення lsкладе кілька файлів в один рядок, розділяючи назви файлів пробілами, щоб зробити чітко вирівняні стовпці:

$ ls
a.txt  b.txt  c.txt

Отже, моє запитання: як це робити?

Чи використовується спеціальний графік управління, щоб "підробити" новий рядок? Або він знає, коли його вихід переносять на іншу команду, і форматують його в іншому випадку?

Відповіді:


24

Або він знає, коли його вихід переносять на іншу команду, і форматують його в іншому випадку?

Так. З повного посібника (доступний через, info lsякщо документація встановлена):

Якщо стандартний вихід є термінальним, то висновок знаходиться у стовпцях (відсортованих по вертикалі), а контрольні символи виводяться як знаки запитання; в іншому випадку виводиться список один на рядок, а контрольні символи виводяться як є.

Якщо вам подобається вихід одного стовпця, ви можете запустити

ls -1

щоб отримати його і в терміналі.


7
Зокрема, функція lsвикористовує для визначення, чи є вихідним терміналом isatty(3).
Blrfl

Також дещо пов'язане, якщо потрібно перевірити це у простому скрипті оболонки, можна запустити tty -sі перевірити його стан повернення.
Даніель Андерссон

10

lsвиявляє його, коли ви передаєте його вихід. Ви можете побачити це в документації:

Якщо стандартний вихід є термінальним, то висновок знаходиться у стовпцях (відсортованих по вертикалі), а контрольні символи виводяться як знаки запитання; в іншому випадку виводиться список один на рядок, а контрольні символи виводяться як є.

Якщо ви хочете, щоб кожен файл у висновку розміщувався в окремому рядку незалежно від перенаправлення труби, ви можете використовувати

ls -1
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.