Добрый день!
Пишу скрипт для цикличного бекапа БД и проверочного восстановления. Поскольку проверочное восстановление занимает достаточно много времени, то решил выполнять его в бекграунде и контролировать его окончание с помощью jobs. По ходу написания столкнулся со странной ситуацией: при вызове из скрипта утилиты jobs она выводит запущенные дочерние процессы и не выводит ничего, если таковых нет. Однако, при перенаправлении её вывода в grep или cat, она начинает выводить информацию об уже завершённых дочерних процессах. Например:
#!/bin/sh
while true ; do
echo new while
( sleep 3 )&
for i in {1..5} ; do
jobs #| cat
sleep 1
done
done
В таком виде jobs выдаёт информацию только по текущему процессу, однако, если убрать решётку перед cat, то на выходе начнём получать информацию и о всех предыдущих дочерних процессах:
[1] Done ( sleep 3 )
[2] Done ( sleep 3 )
[3] Done ( sleep 3 )
[4]+ Running ( sleep 3 ) &
Что такое стандартный вывод я в курсе, но я не понимаю, почему при выводе в консоль его содержимое отличается от того, что передаётся через перенаправление. Флаг -n для jobs на результат не влияет. Можете подсказать, где я туплю?