隐藏 shell 命令的输出通常涉及重定向 stderr 和 stdout。是否有任何内置工具或命令在默认情况下隐藏输出但在错误时转储所有累积的输出?我想将它作为远程ssh命令的包装器运行。现在我让它们使用重定向,但我不知道是什么导致它们失败,而且它们太冗长了。
编辑:最后,我根据@Belmin 的回答创建了以下模板,我稍微调整了一下以从脚本中累积所有以前的命令,使用当前进程标识符,自动删除日志,并添加失败红色错误出现问题时的消息。在此模板中,初始silent包装器将成功,然后第三个命令失败,因为该目录已存在:
#!/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 "\033[91mError running command.\033[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
Run Code Online (Sandbox Code Playgroud)