远程主机

时间:2015-12-13 16:54:24

标签: linux bash ssh

我正在尝试运行一个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到机器,运行命令)一切都很好,但是当尝试通过脚本执行此操作时,我得到错误。我想我的命令替换语法是不正确的,我已经搜索并尝试了各种报价等但无济于事。

有人能指出我出错的地方吗?

1 个答案:

答案 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。

相关问题