J'ai eu une question similaire récemment (bien que je ne l'aie pas postée, je m'y suis penché) et, d'après ce que je peux voir, il semble que l'utilisation de set +e avant la commande et de set -e après fonctionne de manière plus élégante. Voici un exemple, en récupérant la réponse de la commande et en ne laissant pas l'erreur la rejeter.
#!/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
Cette commande récupère la sortie de 'fortune', en vérifiant son statut de sortie, et la répète en écho. Je pense que c'est ce que vous demandiez, ou du moins quelque chose de similaire ? En tout cas, j'espère que cela vous aidera.