Linux 远程主机上的Bash命令替换

Linux 远程主机上的Bash命令替换,linux,bash,ssh,Linux,Bash,Ssh,我试图运行一个bash脚本,将ssh安装到远程主机上,并停止正在运行的单个docker容器 #!/usr/bin/env bash set -e ssh <machine> <<EOF container=$(docker ps | awk 'NR==2' | awk '{print $1;}') docker stop $container EOF 当我手动执行此操作(ssh到机器,运行命令)时,一切都很好,但是当试图通过脚本执行此操作时,我得到了错误。我猜

我试图运行一个bash脚本,将ssh安装到远程主机上,并停止正在运行的单个docker容器

#!/usr/bin/env bash

set -e

ssh <machine> <<EOF

container=$(docker ps | awk 'NR==2' | awk '{print $1;}')

docker stop $container

EOF
当我手动执行此操作(ssh到机器,运行命令)时,一切都很好,但是当试图通过脚本执行此操作时,我得到了错误。我猜我的命令替换语法是不正确的,我已经搜索并尝试了各种引号等,但都没有用


有人能告诉我哪里出了问题吗?

使用
herdeocs执行其内容的参数扩展,因此您的
$(docker ps…
$container
评估在代码到达ssh的stdin之前就已经发生了。工作起来很有魅力。非常感谢@用户1061799,很乐意帮忙。顺便说一句,我已经修改了剧本的另一种形式。但是,如果您仍然想使用
awk
,您可以使用
awk'NR==2{print$1}'
将两个调用合并到一行中。这样更简洁。再次感谢查尔斯
stop.sh: line 4: docker: command not found
#!/bin/sh -e
ssh "$1" bash <<'EOF'
{ read; read container _; } < <(docker ps)
docker stop "$container"
EOF