如何在Shell脚本中排除docker-compose run启动日志并存储命令结果
解决方法
方法1:重定向标准错误输出到/dev/null
docker-compose run 输出的容器启动日志(如 Creating terraform_aws_run ... done.)默认会发送到标准错误流(stderr),而容器内执行命令的结果会发送到标准输出流(stdout)。因此只需捕获stdout,将stderr重定向到空设备即可:
list_account_aliases=$(docker-compose run --rm aws iam list-account-aliases 2>/dev/null)
方法2:使用--quiet参数抑制额外日志
添加--quiet参数可以直接抑制docker-compose的镜像拉取进度、容器启动状态等冗余输出,仅保留容器内命令的执行结果:
list_account_aliases=$(docker-compose run --rm --quiet aws iam list-account-aliases)
方法3:过滤输出内容(兜底方案)
如果启动日志意外混入标准输出,可以用文本过滤工具(如sed)截取启动日志之后的内容。这种方式依赖启动日志的固定格式,通用性稍弱:
list_account_aliases=$(docker-compose run --rm aws iam list-account-aliases | sed -n '/done\./,$p')
说明:
sed -n '/done\./,$p'表示从包含done.的行开始,输出到最后一行的内容。
内容的提问来源于stack exchange,提问作者naomichi
相关产品推荐
相关产品推荐

