隐藏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
2
如果仅重定向stdout,stderr仍会显示;这对您是否足够,或者如果有错误,您是否还想查看stdout?
—
Kromey 2014年
我想同时看到这两者,但前提是出问题了,否则我什么也不想看到。
—
Grzegorz Adam Adam Hankiewicz 2014年
我要做的是将stdout&stderr打印到日志文件中,以免使屏幕混乱。我还打印错误输出到屏幕上,因此如果是和错误,我可以看到它。如果需要详细信息,我可以检查日志文件,该文件包含程序输出和上下文中的程序错误。这样,我可以“看到两者,但仅在出现问题时才能看到”。这有帮助吗?见stackoverflow.com/questions/2871233/...
—
斯特凡Lasiewski
使用两个单独的重定向将stderr和stdout重定向到同一文件是否安全?我认为我们应该始终使用
—
psmith
2>&1
,例如:$* >>"${SILENT_LOG}" 2>&1" || report_and_exit