Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在BASH变量中存储'docker run'命令输出_Bash_Docker_Virtual Machine_Virtualization_Boot2docker - Fatal编程技术网

在BASH变量中存储'docker run'命令输出

在BASH变量中存储'docker run'命令输出,bash,docker,virtual-machine,virtualization,boot2docker,Bash,Docker,Virtual Machine,Virtualization,Boot2docker,我在BASH变量中存储docker run-it-d-p 43211:3000-name appname-h hostname-v$PWD/local\u dir:/root/remote\u dir repo/imagename的输出时遇到问题。我尝试了“backticks”,我也试着像官方文档说的那样运行它,比如说BASH\u VAR=$(docker run…,我甚至试着用docker run…>$file\u DESCRIPTOR…,将输出存储在一个文件中,但存储错误的情况却没有成功,即

我在BASH变量中存储docker run-it-d-p 43211:3000-name appname-h hostname-v$PWD/local\u dir:/root/remote\u dir repo/imagename的输出时遇到问题。我尝试了“backticks”,我也试着像官方文档说的那样运行它,比如说
BASH\u VAR=$(docker run…
,我甚至试着用
docker run…>$file\u DESCRIPTOR…
,将输出存储在一个文件中,但存储错误的情况却没有成功,即该名称已经被另一个容器使用的情况,比如:

来自后台程序的$FATA[0000]错误响应:冲突。容器7c84d8d703c8已经在使用名称“appname”。您必须删除(或重命名)该容器才能重用该名称。

我想说的是,它适用于成功的情况,因此在成功运行应用程序后,我能够在
BASH_VAR
中存储完整的容器ID,但不幸的是,这只解决了我面临的一半问题

任何帮助都将不胜感激


谢谢

您可以使用while循环来读取生成的每一行输出,并以这种方式进行处理

while read -r line_of_output; do
  echo "line: $line_of_output"

done < <(docker ... 2>&1)

您可能需要打破while循环,但这是可能的,例如:

  MYSQL_IMAGE_NAME='mysql/mysql-server:5.7'
  docker pull "$MYSQL_IMAGE_NAME"
  docker images
  docker run --name=mysql-server-container -d "$MYSQL_IMAGE_NAME"
  docker container ls

  while read -r line ; do
     GENERATED_PWD="$(echo $line | grep 'GENERATED ROOT PASSWORD'|awk '{print $5}')"
     test -z $GENERATED_PWD || break
  done < <(docker logs --tail 3000 --follow mysql-server-container)
  echo "GENERATED_PWD: $GENERATED_PWD"
MYSQL\u IMAGE\u NAME='MYSQL/MYSQL服务器:5.7'
docker pull“$MYSQL\u IMAGE\u NAME”
docker图像
docker run--name=mysql服务器容器-d“$mysql\u IMAGE\u name”
码头集装箱
而read-r行;做
生成的_PWD=“$(echo$line | grep'生成的根密码'| awk'{print$5}')”
测试-z$生成| PWD |中断

完成<您需要的是捕获标准误差并将其存储在变量中

使用

将捕获标准输出,而不是标准错误

这是在变量中存储标准错误消息的正确语法:

BASH_VAR=$( { command; } 2>&1 )

output=$(docker run-it-d-p 43211:3000-name appname-h hostname-v$PWD/local\u dir:/root/remote\u dir repo/imagename 2>&1)
是否适合您<代码>2>&1
将stderr重定向到stdout。谢谢您,好心的先生!是的,@kek2mgl,它就像一个符咒!我之所以需要它,是因为我正在构建一个交互式docker容器管理bash脚本,其中包含并需要解析我在幕后发出的所有命令的输出。您可以回答这个问题,这样我就可以将您的评论标记为正确答案。我有这样的bash脚本“#”/usr/bin/bash result=$(docker run-e'SITE=WL'-h pingnet--name pingnet--rm pingnet 2>&1)echo${result}并且不显示任何结果,因为问题可能来自终端的非交互性。您可以尝试使用命令
script
来模拟交互式终端。
BASH_VAR=$(command)
BASH_VAR=`command`
BASH_VAR=$( { command; } 2>&1 )