我编写了一个脚本来为我运行一些 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
假定重定向是参数并决定打印出命令用法。
答案 0 :(得分:0)
这主要是关于标准描述符(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