Почему там пустые строки в выводе моей команды?: найдите ~/x/y/| shuf> ~/Desktop/z.txt

В то время как Вы могли усложнить ситуацию с exec и дополнительное пререкание дескриптора файла, Ваше второе предложение является самым простым. Прежде, чем запуститься X, echo строка маркера в файл журнала.

Все те команды добавили бы в тот же файл, поэтому возможно, это будет хорошая идея предварительно ожидать весь вывод X с маркером, таким образом, можно будет сказать независимо его вывод от той из все еще рабочих предыдущих команд. Что-то вроде:

{ X; } | sed 's,^,[X say] ,'

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

Если Вы готовы рискнуть для повреждения одной строки журнала и можете прервать первый пакет приложений без последствия, это работало бы также:

{ Y; } >> log &
sleep $t
kill -STOP %% # last job, like the same as %1
echo -e "\nX started" >> log
kill -CONT %%
{ X; } >> log2

0
14.06.2013, 21:49
2 ответа

shuf не добавляют пустые строки, таким образом, они должны произойти из вывода find. Это указывает, что существуют файлы, имя которых содержит две последовательных новых строки где-нибудь в том каталоге. Можно посмотреть, видят то, что они с командой

find ~/x/y/ -name '*
*' -print -exec echo '========'

или

find ~/x/y/ -name '*
*' -exec ls -q

Справляться с именами файлов, содержащими новые строки с Вашим shuf команда, используйте пустой байт в качестве разделителя.

find ~/x/y/ -print0 | shuf -z
1
28.01.2020, 02:28

Я не уверен, почему пустые строки появляются в Вашем выходном файле, но можно попытаться отфильтровать пустые строки прежде, чем записать в файл.

find ~/x/y/ | shuf | grep -v '^$' > ~/Desktop/z.txt

Для разыскивания источника пустых строк попытайтесь работать find отдельно.

find ~/x/y/ > ~/Desktop/z.txt

Сделайте пустые строки появляются в z.txt? Если так, вероятно, что они создаются find.


Можно использовать завершенные нулем объекты вместо завершенных новой строкой объектов. При выборе первого объекта из списка просто используйте текст от первого символа до первого нулевого символа.

find ~/x/y/ -print0 | shuf -z > ~/Desktop/z.txt
2
28.01.2020, 02:28
  • 1
    , да, по некоторым причинам имя файла с большим количеством новых строк было принято в моих старых osx файлах (я не думаю, что это обычно делает это). –   14.06.2013, 21:44
  • 2
    Хорошо.:) Спасибо за предоставление настолько быстрых и полных ответов! –   14.06.2013, 21:51
  • 3
    В случае, если Вы не можете переименовать файл, я добавил метод для работы с файлом к моему ответу. –   14.06.2013, 21:53

Теги

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