包含“docker exec”命令输出的变量未对齐

包含“docker exec”命令输出的变量未对齐

我试图在 Docker 容器内运行 bash,docker exec bash -c通过回显将在条件语句中使用的内容,将其输出存储在主机(而不是容器)上。我可以回显任何内容,例如 IP 主机名或只是一个字符串。问题是echo输出:

$ var1=$(docker exec -t test_masternode1 bash -c 'echo 1')
$ echo $var1
1
$ declare -p var1
"eclare -- var1="1
$ var2=1
$ declare -p var2
declare -- var2="1"
$ echo $var2
1
$ if [ "$var1" == "$var2" ];then echo "same";else echo "not same";fi
not same

正如您所看到的,var1var2都是,1if测试else失败了。此外,变量声明输出未对齐。 Docker 容器的输出出现问题;不确定那是什么。

我还尝试了 Ubuntu 中的另一个 Docker 镜像。上面的例子来自 CentOS 7。

$ var3=`docker run -t ubuntu bash -c 'echo 1'`
$ declare -p var3
"eclare -- var3="1

答案1

数据从 Docker 中以回车符返回。输出回车符时,会使光标移动到行首。因此,当您显示变量的值时,输出看起来有点奇怪。对于其他人来说,这似乎也是(或曾经是)一个问题,这一点可以明显看出这个 GitHub 问题

要从数据中删除任何回车符,请将其传递给tr -d '\r'

var1=$(docker exec -t test_masternode1 bash -c 'echo 1' | tr -d '\r')

...或者只是运行不带选项的命令-t。该-t选项docker exec分配docker run一个伪 TTY,只有交互式命令才真正需要它。该命令echo 1不是这样的命令。

相关内容