我正在尝试运行一个bsh脚本ssh到远程主机并停止正在运行的单个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到机器,运行命令)一切都很好,但是当尝试通过脚本执行此操作时,我得到错误。我想我的命令替换语法是不正确的,我已经搜索并尝试了各种报价等但无济于事。
有人能指出我出错的地方吗?
答案 0 :(得分:6)
在启动heredoc时使用<<'EOF'
(或<<\EOF
- 仅引用第一个字符会产生相同的效果),以防止其扩展在本地进行评估。
BTW,就个人而言,我的写法有点不同:
#!/bin/sh -e
ssh "$1" bash <<'EOF'
{ read; read container _; } < <(docker ps)
docker stop "$container"
EOF
第一个read
消耗docker ps
输出的第一行;第二列只提取第一列 - 仅使用bash builtins。