我正在写一个应该对用户“透明”的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吗?
解决方法:
你真的需要第二部分,用错误信息替换命令的输出吗? Linux命令打印自己的错误消息,这些消息不一定是“找不到命令”.您将隐藏真正的错误(权限被拒绝,文件未找到,内存不足,段错误等),并且通常会显示错误的错误消息(未找到命令).
如果删除该检查,则可以将循环简化为如下所示:
while true; do
read -e COMMAND
if can_be_done "$COMMAND"; then
eval "$COMMAND"
fi
done
> read -e使用readline获取命令,使提示更像shell(& uparrow;和& downarrow;例如,历史).
>命令;如果[$? == 0];然后更像惯用地写,好像< command> ;;然后.
>引用可确保正确处理特殊字符和空格.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。