Saya sebenarnya memiliki pertanyaan yang sama baru-baru ini (meskipun saya tidak memposting, saya sempat melakukannya), dan, dari apa yang saya lihat, sepertinya hanya menggunakan set + e sebelum perintah dan set -e sesudahnya bekerja paling elegan. Ini sebuah contoh, mengambil respon dari perintah dan tidak membiarkan kesalahan membuangnya.
#!/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
Ini mengambil output 'keberuntungan', memeriksa status keluarnya, dan menggemakan dan mengatakannya. Saya pikir ini yang Anda minta, atau setidaknya sesuatu yang serupa? Bagaimanapun, semoga ini membantu.