微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

linux – 仅在命令失败时重定向stdout?

我正在写一个应该对用户“透明”的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&gt ;;然后.
>引用可确保正确处理特殊字符和空格.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐