Первый подход, временно сохранить статус выхода в некотором файле. По этой причине вы должны создать подоболочку, используя фигурные скобки:
(your_script.sh.pl.others; echo $? >/tmp/myerr)|\ #subshell with exitcode saving
grep sh #next piped commands
exitcode=$(cat /tmp/myerr) #restore saved exitcode
echo $exitcode #and print them
другой подход, представленный Рэнди выше, более простая реализация кода:
some-script.sh | grep mytext
echo ${PIPESTATUS[0]} #print exitcode for first commands. tables are indexted from 0
это все. оба работают под Bash (я знаю, Bashizm). удачи :)
оба подхода не сохраняют временную трубу в физический файл, только код выхода.