如何屏蔽docker命令的输出



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

这是一个关于标准描述符(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必须放在之后变得清晰。

(顺便说一下,将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

相关内容

  • 没有找到相关文章

最新更新