1

假设我有两台服务器,A并且B. 我还有一个bash在服务器上执行的脚本,A如下所示:

build_test.sh

#!/bin/bash
ssh user@B <<'ENDSSH'
echo "doing test"
bash -ex test.sh
echo "completed test"
ENDSSH

测试.sh

#!/bin/bash
docker exec -i my_container /bin/bash -c "echo hi!"

问题是completed test没有打印到终端。

这是运行的输出build_test.sh

$ ./build_test
doing test
+ docker exec -i my_container /bin/bash -c "echo hi!"
hi!

我希望completed test在 之后输出hi!,但事实并非如此。我该如何解决?

4

1 回答 1

2

docker正在消耗,但不使用,它的标准输入,它继承自test.sh. test.sh从 继承其标准输入bash,从 继承其标准输入ssh。这意味着它docker自己在远程 shell 之前读取脚本的最后一行。

要修复,只需将 docker 的标准输入从/dev/null.

docker exec -i my_container /bin/bash -c "echo hi!" < /dev/null
于 2019-04-19T18:36:04.890 回答