我想在主机上执行一个脚本(script_on_host.sh
),然后该脚本进入docker容器内部,以便使用第二个脚本获取一些数据(script_in_container.sh
。数据只能在容器内部获得,而不能直接从主机获得,因此才这样做。
我在两个脚本之间传递数据时遇到问题。我尝试了以下方法:
脚本_在_容器中
#!/bin/bash
x=1
y=2
z=6.3
echo $x
echo $y
echo $z
主机上的脚本
#!/bin/bash
results=$(docker exec mycontainer './script_in_container.sh')
X=$results(1)
Y=$results(2)
Z=$results(3)
但是它抛出了一个错误。有人能帮我吗?有没有一种更好的或更标准的方式来以这种方式传递变量?我觉得我在这里可能做得有点笨拙,使用 echo 从容器脚本中打印多行。
最简单的解决方案是使用
set --
将 docker 容器中的变量分配给位置参数,如下所示:您可以使用 readarray 来构建一个由换行符分隔的结果数组。
您可以使用sed,如下所示:
sed 表达式实际上是两个命令:
1q
是匹配第一行并退出的命令;
是命令分隔符d
删除当前行。在读取第一行的情况下,这
d
有点多余,因为 sed 在打印第 1 行后就会退出,但对于其他行,d
有必要删除与第一个命令不匹配的任何行。