исказите завершение работы к сценарию
сценарий должен дать все параметры, и т.д. к исходному исполняемому файлу завершения работы
НО: сценарий должен зарегистрировать их это
Когда Вы передаете вывод по каналу, ls
действия по-другому.
Этот факт скрыт в информационной документации:
Если стандартный вывод является терминалом, вывод находится в столбцах (отсортированный вертикально), и управляющие символы производятся как вопросительные знаки; иначе вывод перечислен, тот на строку и управляющие символы производятся как есть.
Для доказательства его попытайтесь работать
ls
и затем
ls | less
Это означает, что, если Вы хотите, чтобы вывод, как гарантировал, будет одним файлом на строку, независимо от того, передается ли он по каналу или перенаправляется, необходимо работать
ls -1
(-1
номер один),
Или, можно вызвать ls | less
производить в столбцах путем выполнения
ls -C
(-C
капитал C)
Ваше исследование выделяет основную причину почему, анализируя вывод ls
всегда плохая идея. Посмотрите Wiki Greg для полного объяснения.
Думайте о своей проблеме наоборот. Вы заметили, что ls иногда делает и иногда не печатает новые строки между, он производится. Для использования в сценариях или при принуждении -1
флаг, это делает. Одна новая строка в конце каждого файла. Что нет никакой гарантии, что каждая новая строка представляет новое имя файла. На самом деле, если имя файла будет содержать саму новую строку, то вывод ls будет absolutly un-parsable. Рассмотрите эти имена файлов:
file1
file2\nfile3
file4
Когда Вы ls -1
каталог с этим в нем, Вы получили бы что-то, что было похоже на это:
file1
file2
file3
file4
Вы естественно не предположили бы, что было четыре файла? Так был бы любые сценарии, которые анализируют вывод ls. В действительности существует три файла, один из с хитрым именем, но Вы не смогли бы полагать это из вывода ls.*
*, Если Вы не использовали -l
отметьте и замеченный, вывод был borked, но Ваши сценарии будут все еще дросселировать.
ls
, -b
опция может помочь. Это поворачивает новую строку в \n
, и т.д.
– Mikel
10.04.2012, 18:05
ls
. Это полезно, но явно непоследовательно и удивительно. Но обратите внимание, что некоторые команды, которые производят цветной вывод, разделят цвета, будучи переданным по каналу также. – Mikel 01.04.2011, 05:46ls
всегда печать один на строку, иlc
всегда печать в столбцах. – Mikel 01.04.2011, 05:49dpkg -l
будет использовать общую ширину экрана, но если это печатает к каналу, это предполагает, что терминал 80 столбцов шириной, и сокращает вывод, чтобы заставить его соответствовать при необходимости. – Mikel 01.04.2011, 05:52