我已经编写了一个脚本来为我运行一些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
必须放置在后面的事实就变得很清楚。
(顺便说一句,这两个标准错误到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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句