Tôi thực sự có một câu hỏi tương tự gần đây (mặc dù tôi không đăng, tôi đã giải quyết nó), và, từ những gì tôi có thể thấy, có vẻ như chỉ sử dụng set + e trước khi lệnh và set -e sau đó hoạt động một cách thanh lịch nhất. Đây là một ví dụ, lấy phản hồi của lệnh và không để lỗi ném đi.
#!/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
Cái này lấy đầu ra của 'vận may', kiểm tra trạng thái thoát của nó và lặp lại và nói nó. Tôi nghĩ rằng đây là những gì bạn đã yêu cầu, hoặc ít nhất là một cái gì đó tương tự? Dù sao, hy vọng điều này sẽ giúp.