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

老栗子 2019-09-12 02:05:41
我正在写一个应该对用户“透明”的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吗?
...全文
22 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38090265 2019-09-12
  • 打赏
  • 举报
回复
你真的需要第二部分,用错误信息替换命令的输出吗? 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> ;;然后.>引用可确保正确处理特殊字符和空格.

433

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧