如何使 docker 命令的输出静音
How to silence output from docker commands
我已经为 运行 一些 docker 命令编写了一个脚本,我想使这些命令的输出静音。例如 docker load
、docker run
或 docker 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
假设重定向是参数并决定打印出命令用法。
这主要是一个关于标准描述符(stdout、stderr)和重定向的 shell 问题。
为了达到你想要的效果,你不应该写cmd 2>&1 /dev/null
也不应该写cmd 2>&1 >/dev/null
而只写:cmd >/dev/null 2>&1
助记词:
很容易想到这个>
语法的直觉是:
>/dev/null
可读为:STDOUT := /dev/null
2>&1
可读为:STDERR := STDOUT
这样一来,2>&1
必须放在 之后 的事实就清楚了。
(顺便说一句,将 stderr 和 stdout 都重定向到管道有点不同,将按以下顺序编写: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
我已经为 运行 一些 docker 命令编写了一个脚本,我想使这些命令的输出静音。例如 docker load
、docker run
或 docker 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
假设重定向是参数并决定打印出命令用法。
这主要是一个关于标准描述符(stdout、stderr)和重定向的 shell 问题。
为了达到你想要的效果,你不应该写cmd 2>&1 /dev/null
也不应该写cmd 2>&1 >/dev/null
而只写:cmd >/dev/null 2>&1
助记词:
很容易想到这个>
语法的直觉是:
>/dev/null
可读为:STDOUT := /dev/null
2>&1
可读为:STDERR := STDOUT
这样一来,2>&1
必须放在 之后 的事实就清楚了。
(顺便说一句,将 stderr 和 stdout 都重定向到管道有点不同,将按以下顺序编写: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