bash变量扩展管道传输到ssh

时间:2017-11-28 13:12:53

标签: linux bash shell ssh

我无法理解如何在shell脚本中声明/引用这些变量。

鉴于commands_to_execute_on_remote.sh的内容为:

for c in 1 2 3 4 5
do
    supervisorctl restart broadcast-server-${ENVIRONMENT_NAME}-${c}
done

ENVIRONMENT_NAME声明为本地计算机上的环境变量...

当我从本地机器运行时,例如:

cat commands_to_execute_on_remote.sh | ssh user@123.456.789

如何引用这些变量,以便在脚本通过管道传送到远程框时,$ENVIRONMENT_NAME填充实际值,但$c显然是一个循环计数器在剧本中?

1 个答案:

答案 0 :(得分:1)

将命令放在单独的文件中是一种不必要的复杂问题。

ssh user@123.45.67.89 <<____EOF
    for c in 1 2 3 4 5; do
        supervisorctl restart broadcast-server-${ENVIRONMENT_NAME}-\$c
    done
____EOF

注意你希望如何在远程$c shell中评估ssh(所以你需要从本地shell中转义它),而$ENVIRONMENT_NAME在你的本地shell之前扩展sed "s/[$][{]ENVIRONMENT_NAME[}]/$ENVIRONMENT_NAME/" commands_to_execute_on_remote.sh | ssh user@132.45.67.89 命令行被发送到远程服务器。

如果你坚持将脚本片段放在一个文件中,有点像

ENVIRONMENT_NAME

允许(并避免丑陋的useless cat)。 (如果删除技术上不必要的大括号,则需要调整正则表达式;如果"s%...%...%"可能包含斜杠,请使用其他分隔符,如C2。)