加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 仅在成功时隐藏shell命令的输出?

发布时间:2020-12-13 17:58:32 所属栏目:Linux 来源:网络整理
导读:Hiding the output of a shell command通常涉及重定向stderr和stdout.是否有任何内置工具或命令默认隐藏输出但错误转储所有累积输出?我想将它作为远程ssh命令的包装器运行.现在我让他们使用重定向,但我不知道是什么让他们失败,他们只是太冗长. 编辑:最后我
Hiding the output of a shell command通常涉及重定向stderr和stdout.是否有任何内置工具或命令默认隐藏输出但错误转储所有累积输出?我想将它作为远程ssh命令的包装器运行.现在我让他们使用重定向,但我不知道是什么让他们失败,他们只是太冗长.

编辑:最后我根据@Belmin的答案创建了以下模板,我稍微调整一下来累积脚本中的所有先前命令,使用当前进程标识符,自动删除日志,并添加失败红色错误出现问题时的消息.在此模板中,初始静默包装器将成功,然后第三个命令失败,因为该目录已存在:

#!/bin/sh

set -e

SILENT_LOG=/tmp/silent_log_$$.txt
trap "/bin/rm -f $SILENT_LOG" EXIT

function report_and_exit {
    cat "${SILENT_LOG}";
    echo "33[91mError running command.33[39m"
    exit 1;
}

function silent {
    $* 2>>"${SILENT_LOG}" >> "${SILENT_LOG}" || report_and_exit;
}

silent mkdir -v pepe
silent mkdir -v pepe2
silent mkdir -v pepe
silent mkdir -v pepe2

解决方法

我这样设置了一个 bash function:
function suppress { /bin/rm --force /tmp/suppress.out 2> /dev/null; ${1+"$@"} > /tmp/suppress.out 2>&1 || cat /tmp/suppress.out; /bin/rm /tmp/suppress.out; }

然后,您可以运行命令:

suppress foo -a bar

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读