我正在尝试运行一个SSH到远程主机上的bash脚本,并停止正在运行的单个docker容器。
#!/usr/bin/env bash set -e ssh <machine> <<EOF container=$(docker ps | awk 'NR==2' | awk '{print $1;}') docker stop $container EOF
但是,出现以下错误:
stop.sh: line 4: docker: command not found
当我手动执行此操作(向计算机SSH,运行命令)时,一切都很好,但是当尝试通过脚本执行操作时,我得到了错误。我猜我的命令替换语法不正确,我已经搜索并尝试了各种引号等,但无济于事。
谁能指出我要去哪里了?
在启动您的Heredoc时,请使用<<'EOF'(或<<\EOF-仅引用第一个字符将具有相同的效果),以防止对其扩展进行本地评估。
<<'EOF'
<<\EOF
顺便说一句,就我个人而言,我会这样写:
#!/bin/sh -e ssh "$1" bash <<'EOF' { read; read container _; } < <(docker ps) docker stop "$container" EOF
第一个read消耗docker ps输出的第一行;第二个消耗输出。第二个仅提取第一列-仅使用bash内置函数。
read
docker ps