如何使 docker 命令的输出静音

时间:2021-02-04 19:55:05

标签: docker shell stdout stderr io-redirection

我编写了一个脚本来为我运行一些 docker 命令,我想使这些命令的输出静音。例如 docker loaddocker rundocker stop

docker load 确实有一个标志 --quiet,看起来它应该做我想做的事情,但是当我尝试使用它时,它仍然打印出 Loaded image: myimage。即使这个标志对我有用,并不是所有的 docker 命令都有这个标志可用。我曾尝试使用像 docker run ... 2>&1 /dev/null 这样的重定向,但是重定向参数被解释为 docker 容器的命令参数,其他 docker 命令似乎也是如此,例如 tar -Oxf myimage.img.tgz | docker load 2>&1 /dev/null 假定重定向是参数并决定打印出命令用法。

1 个答案:

答案 0 :(得分:0)

这主要是关于标准描述符(stdout、stderr)和重定向的 shell 问题。

为了实现你想要的,你不应该写 fun start(scheduledTreatmentId: Long? = null) { //... other viewModelScope.launch { scheduledTreatmentRepository.getScheduledTreatmentWithData(scheduledTreatmentId).let { if (it != null){ onScheduledTreatmentLoaded(it) }else{ //Should never get here but gets her in test classes Log.wtf(TAG, "Passed scheduletreatmentid does not exist.") } } } } cmd 2>&1 /dev/null,而应该写:cmd 2>&1 >/dev/null

助记符:

容易想到这个 cmd >/dev/null 2>&1 语法的直觉是:

  • > 可以读取:>/dev/null
  • STDOUT := /dev/null 可以读取:2>&1

这样,STDERR := STDOUT 必须放在之后这一事实就很清楚了。

(顺便说一句,将两个 stderr 重定向到 stdout 到管道有点不同,将按以下顺序编写:2>&1

测试这个的最小完整示例:

cmd1 2>&1 | cmd2