Bash предваряет текст каждой строкой, напечатанной командами

Oliver спросил: 07 октября 2018 в 12:28 в: bash

Я пытаюсь найти способ сделать что-то вроде этого:

# script.sh:
cmd0
set_prepend "some text"
cmd1
cmd2
cmd3
unset_prepend
cmd4

Тогда независимо от стандартного вывода, генерируемого cmd1, 2 и 3, каждая строка будет дополнена"некоторыми" текст". Между командами нет никакой связи, и команды могут быть любыми (ls, cat, awk и т. Д.):

$ script.sh
cmd0 line1
...
cmd0 lineN0
some text cmd1 line1
some text ...
some text cmd1 lineN1
some text cmd2 line1
some text ...
some text cmd2 lineN2
some text cmd3 line1
some text ...
some text cmd3 lineN3
cmd4 line1
...
cmd4 lineN4

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

script.sh | prepender 

и для каждой строки, полученной prepender, проверяет наличие файла; если файл существует, содержимое - это текст, который нужно добавить; и set_prepend создаст этот файл, а unset_prepend удалит его. Однако буферизация будет мешать этому, поэтому ее придется отключить, и я не уверен, как гарантировать, что строка, идущая в stdout, будет обработана prepender до выполнения следующего сценария cmd (в противном случае возможно условие гонки).

0 ответов