Вывод ls(без аргументов), кажется, разделяет имена файлов с переносами строк.
Доказательства:
ls | grep fooработает как положено,grepобрабатывая каждое имя файла как отдельную строку ввода.ls > files.txt; vim files.txt-> в Vim каждый файл находится на отдельной строке
И все же в терминале вывод команды lsпомещает несколько файлов в одну строку, разделяя имена файлов пробелами, чтобы сделать хорошо выровненные столбцы:
$ ls
a.txt b.txt c.txt
Итак, мой вопрос: как мне это сделать?
Использует ли он какой-то специальный контрольный символ для «подделки» новой строки? Или он знает, когда его вывод передается другой команде, и в этом случае форматирует вывод иначе?
lsиспользует, чтобы определить, является ли вывод терминаломisatty(3).