Вывод от ls имеет новые строки, но отображается на одной строке. Почему?

исказите завершение работы к сценарию
сценарий должен дать все параметры, и т.д. к исходному исполняемому файлу завершения работы
НО: сценарий должен зарегистрировать их это

45
01.04.2011, 05:31
2 ответа

Когда Вы передаете вывод по каналу, ls действия по-другому.

Этот факт скрыт в информационной документации:

Если стандартный вывод является терминалом, вывод находится в столбцах (отсортированный вертикально), и управляющие символы производятся как вопросительные знаки; иначе вывод перечислен, тот на строку и управляющие символы производятся как есть.

Для доказательства его попытайтесь работать

ls

и затем

ls | less

Это означает, что, если Вы хотите, чтобы вывод, как гарантировал, будет одним файлом на строку, независимо от того, передается ли он по каналу или перенаправляется, необходимо работать

ls -1

(-1 номер один),

Или, можно вызвать ls | less производить в столбцах путем выполнения

ls -C

(-C капитал C)

48
27.01.2020, 19:34
  • 1
    @theconnorpower: это в значительной степени характерно для ls. Это полезно, но явно непоследовательно и удивительно. Но обратите внимание, что некоторые команды, которые производят цветной вывод, разделят цвета, будучи переданным по каналу также. –  Mikel 01.04.2011, 05:46
  • 2
    @theconnorpower: Мелочи: изобретатели Unix продолжали писать Plan9. В Plan9, ls всегда печать один на строку, и lc всегда печать в столбцах. –  Mikel 01.04.2011, 05:49
  • 3
    @theconnorpower: существуют также программы, которые читают размер терминала и корректируют их вывод соответственно, например, на Debian dpkg -l будет использовать общую ширину экрана, но если это печатает к каналу, это предполагает, что терминал 80 столбцов шириной, и сокращает вывод, чтобы заставить его соответствовать при необходимости. –  Mikel 01.04.2011, 05:52
  • 4
    @Mikel, Интересный слышать ls/lc различия в Plan9. Спасибо за подробный ответ. –  theconnorpower 01.04.2011, 06:02
  • 5
    Как программа может определить, перенаправляется ли ее вывод в файл или идет ли она в оболочку? –  user2820379 30.12.2014, 08:50

Ваше исследование выделяет основную причину почему, анализируя вывод ls всегда плохая идея. Посмотрите Wiki Greg для полного объяснения.

Думайте о своей проблеме наоборот. Вы заметили, что ls иногда делает и иногда не печатает новые строки между, он производится. Для использования в сценариях или при принуждении -1 флаг, это делает. Одна новая строка в конце каждого файла. Что нет никакой гарантии, что каждая новая строка представляет новое имя файла. На самом деле, если имя файла будет содержать саму новую строку, то вывод ls будет absolutly un-parsable. Рассмотрите эти имена файлов:

file1
file2\nfile3
file4

Когда Вы ls -1 каталог с этим в нем, Вы получили бы что-то, что было похоже на это:

file1
file2
file3
file4

Вы естественно не предположили бы, что было четыре файла? Так был бы любые сценарии, которые анализируют вывод ls. В действительности существует три файла, один из с хитрым именем, но Вы не смогли бы полагать это из вывода ls.*

*, Если Вы не использовали -l отметьте и замеченный, вывод был borked, но Ваши сценарии будут все еще дросселировать.

4
27.01.2020, 19:34
  • 1
    Если действительно необходимо проанализировать вывод ls, -b опция может помочь. Это поворачивает новую строку в \n, и т.д. –  Mikel 10.04.2012, 18:05

Теги

Похожие вопросы