Есть такой скрипт:
if ! myprgm; then
echo "fail"
exit 1
fi
Я хочу сохранять то, что выводит myprgm в stdout в файл stdout.txt и для каждой строчки печатать в stdout «o», а вывод в stderr сохранять в stderr.txt и и для каждой строчки печатать в stdout «x». Вот что у меня получилось:
mkfifo out
mkfifo err
process_out() {
while read line; do
echo "${line}" >> stdout.txt
/bin/echo -n "o"
done < out
}
process_err() {
while read line; do
echo "${line}" >> stderr.txt
/bin/echo -n "x"
done < err
}
if ! myprgm > out 2> err & process_out & process_err; then
echo "fail"
exit 1
fi
$?
, от которого зависит срабатывание if будет принадлежать функции process_err, а не myprgm.Как можно грамотно переписать этот говнокод? Хотелось бы, чтобы работало в POSIX-совместимом шелле.