【问题标题】:How to silence output from docker commands如何使 docker 命令的输出静音
【发布时间】:2021-05-09 04:24:09
【问题描述】:

我已经编写了一个脚本来为我运行一些 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 假定重定向是参数并决定打印出命令用法。

【问题讨论】:

    标签: docker shell stdout stderr io-redirection


    【解决方案1】:

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

    为了实现你想要的,你不应该写cmd 2>&1 /dev/nullcmd 2>&1 >/dev/null,而只是写:cmd >/dev/null 2>&1

    助记符:

    很容易想到这个> 语法的直觉是:

    • >/dev/null 可阅读:STDOUT := /dev/null
    • 2>&1 可阅读:STDERR := STDOUT

    这样,2>&1 必须放在之后这一事实就变得清晰了。

    (顺便说一句,将两个标准错误重定向到标准输出到管道有点不同,并且将按以下顺序编写:cmd1 2>&1 | cmd2

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

    $ cmd() { echo "stdout"; echo >&2 "stderr"; }
    
    $ cmd 2>&1 >/dev/null  # does no work as intended
    stderr
    
    $ cmd >/dev/null 2>&1  # ok
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-17
      • 2018-10-26
      • 2018-06-07
      • 2019-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-02
      相关资源
      最近更新 更多