我不知道如何在 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
显然是脚本中的循环计数器?
最佳答案
将命令放在单独的文件中是不必要的复杂化。
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
请注意您希望如何在远程 ssh
shell 中评估 $c
(因此您需要将其从本地 shell 中转义),而 $ENVIRONMENT_NAME
在将命令行发送到远程服务器之前由本地 shell 展开。
如果你坚持将脚本片段放在一个文件中,比如
sed "s/[$][{]ENVIRONMENT_NAME[}]/$ENVIRONMENT_NAME/" commands_to_execute_on_remote.sh |
ssh user@132.45.67.89
允许这样做(并避免丑陋的 useless cat
)。 (如果删除技术上不必要的大括号,则需要调整正则表达式;如果 ENVIRONMENT_NAME
可以包含斜杠,请使用不同的分隔符,例如 "s%...%...%"
。)
关于linux - bash 变量扩展通过管道传输到 ssh,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47532477/