У мене насправді було подібне питання нещодавно (хоча я не публікував, я обійшов його), і, як я бачу, здається, що просто використання set + e перед командою і set -e згодом працює найелегантніше. Ось приклад, схопивши відповідь команди і не допустивши, щоб помилка викинула її.
#!/bin/sh
args=""
for argcol in $*
do
args="${args} ${argcol}"
done
fortunevar=""
fortfail=""
{
set +e
fortunevar=`fortune $args`
fortfail=$?
set -e
} &> /dev/null
if [ $fortfail == 0 ]
then
echo ${fortunevar}
say ${fortunevar}
else
echo misfortune: an illegal option was detected!
echo misfortune: usage: misfortune [-afilosw] [-m pattern][ [#%] file/directory/all]
fi
Це захоплює висновок "фортуна", перевіряючи його вихідний стан, і лунає і каже це. Я думаю, це те, про що ви просили, або принаймні щось подібне? У будь-якому випадку, сподіваюся, що це допомагає.