我正在编写一个应该对用户“透明”的 bash 脚本。它从用户那里读取命令并拦截它们,根据某些标准,只允许其中一些命令由 bash 执行。它(基本上)是这样工作的:
while true; do
read COMMAND
can_be_done $COMMAND
if [ $? == 0 ]; then
eval $COMMAND
if [ $? != 0 ]; then
echo "Error: command not found"
fi
fi
done
问题是,当命令失败时,您还会将内容打印到控制台。但是,如果我将结果保存在一个变量中并且只在它没有失败时打印它,就像这样:
RESULT=$(eval $COMMAND)
然后还有另一个问题:特殊格式丢失(例如,“ls --color”不再显示颜色)
我的问题是:如果成功,有没有办法让命令打印到 STDOUT,但如果失败,则打印到 /dev/null?