假设我有两个服务器,A
和B
。我也有一个在服务器bash
上执行的A
脚本,如下所示:
#!/bin/bash
ssh user@B <<'ENDSSH'
echo "doing test"
bash -ex test.sh
echo "completed test"
ENDSSH
#!/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!
,但不是。我该如何解决?
答案 0 :(得分:2)
<h6 class="date">October 13, 2017</h6>
<h3>Contact Mgmt. - C</h3>
<div class="container p-0 m-0"
onmouseover="showBTN()"
onmouseout="removeBTN()">
<img
src="https://picsum.photos/254/384?grayscale"
style="border-radius: 10px;"
/>
<a
id="butt"
style="display: none;"
href="https://github.com"
class="btn btn-outline-success">
Github code
</a>
</div>
正在使用(尽管未使用)其从docker
继承的标准输入。 test.sh
继承自test.sh
的标准输入,而bash
继承自ssh
的标准输入。这意味着docker
本身正在远程外壳程序之前读取脚本的最后一行。
要修复,只需从/dev/null
重定向docker的标准输入即可。
docker exec -i my_container /bin/bash -c "echo hi!" < /dev/null