我无法理解如何在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
显然是一个循环计数器在剧本中?
答案 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
。)