我需要创建一个shell脚本,该脚本使用SSH连接到远程机器,然后在该机器上运行的Docker容器中运行一些命令。
我希望下面的命令可以工作。但是它只执行容器中的第一个命令。
ssh -i key user@1.1.1.1 docker exec my-container bash -c command1 && command2 && command3
到目前为止,我能想到的最佳解决方案是:
ssh -i key user@1.1.1.1 "docker exec my-container bash -c 'command1 && command2 && command3'"
但是它只能和一些命令一起使用,我可以运行像mkdir echo这样的命令,但是我不能和curl一起使用。
ssh -i key user@1.1.1.1 "docker exec my-container bash -c 'curl --verbose --stderr stderr -X GET "http://2.2.2.2:5000/file/download" -H "Authorization: Bearer $1" > curl_out
我不知何故需要使curl命令工作。它成功地扩展了$1作为授权令牌,但curl命令没有看到使用头。我不能让它工作。
有没有更好的方法来构造这种嵌套的命令管道。我尝试了50种不同的引号组合,不同的变量,尝试在容器内的shell脚本中编写回显,然后运行它。每种解决方案在尝试使用带有多个选项/参数的复杂命令时都失败了。
1条答案
按热度按时间41zrol4v1#
当你写下这段话时:
您只是在创建一个本地shell管道,这与您要运行以下命令是一样的:
您的shell并不神奇地知道您打算在远程主机上运行后两个命令,如果您想将整个shell管道传递给远程主机,则需要将其引用起来。
你可能会想做这样的事情:
但这仍然无法达到预期效果:在本例中,您正在远程主机上运行命令
docker exec my-container bash -c command1 && command2 && command3
。也就是说,只有command1
正在容器内运行。您需要另一层引号: