如何解决如何使 docker 命令的输出静音
我编写了一个脚本来为我运行一些 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 问题。
为了实现你想要的,你不应该写 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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。