В то время как Вы могли усложнить ситуацию с 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
shuf
не добавляют пустые строки, таким образом, они должны произойти из вывода find
. Это указывает, что существуют файлы, имя которых содержит две последовательных новых строки где-нибудь в том каталоге. Можно посмотреть, видят то, что они с командой
find ~/x/y/ -name '*
*' -print -exec echo '========'
или
find ~/x/y/ -name '*
*' -exec ls -q
Справляться с именами файлов, содержащими новые строки с Вашим shuf
команда, используйте пустой байт в качестве разделителя.
find ~/x/y/ -print0 | shuf -z
Я не уверен, почему пустые строки появляются в Вашем выходном файле, но можно попытаться отфильтровать пустые строки прежде, чем записать в файл.
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