【问题标题】:How to fix this loop that execute remote command using ssh如何修复使用 ssh 执行远程命令的循环
【发布时间】:2018-12-29 15:55:46
【问题描述】:

我正在使用 aws ssm 执行操作任务。 执行类似如下命令时(细节替换),远程执行时变量i的值设置不正确

我的代码有什么问题?

aws ssm send-command --document-name "AWS-RunShellScript" --instance-ids $instance_id \
    --parameters '{"commands":["count=4; for i in { 1..$count }; do echo $i; ssh $(server_$i) bash -c '"'echo $i && echo $(date +%Y-%m-%d)'"'; done;"],"executionTimeout":["3600"]}' \
    --timeout-seconds 600 --region us-west-2
  • 第一个回显将返回 1,2,3,4
  • 但是第二个回显将返回 4, 4, 4, 4

期望:两者都应该返回 1,2,3,4

【问题讨论】:

  • 我已将问题编辑为使用代码格式(四个空格前缀的东西),并将其分成三行带续行而不是一长行;这不应该改变意思。但是结果仍然很难理解。在我看来,您至少有引用问题:您似乎试图将单引号字符串嵌套在另一个单引号字符串中,但这根本不起作用。顺便说一句,{ 1..$count } 也不是有效的 shell 语法,因为在替换变量之前大括号会被扩展。
  • Bash 命令行中的引用显然被破坏了,但我无法弄清楚代码的真正含义。你能解释一下它应该做什么,或者edit 的问题是显示一个在本地执行你想要的工作脚本?

标签: bash aws-ssm


【解决方案1】:
ws ssm 发送命令 --document-name "AWS-RunShellScript" --instance-ids $instance_id \ --parameters '{"commands":["count=4; for i in { 1..$count }; do echo $i; ssh $(server_$i) bash -c '"'echo $i && echo $ (日期 +%Y-%m-%d)'"'; 完成;"],"executionTimeout":["3600"]}' \ --timeout-seconds 600 --region us-west-2

让我们逐步分解您的命令。 首先,它包含一个长字符串参数:

--parameters '{"commands":["count=4; for i in { 1..$count }; do echo $i; ssh $(server_$i) bash -c '"'echo $i && echo $(date +%Y-%m-%d)'"'; done;"],"executionTimeout":["3600"]}' 在命令行中,感觉是这样的:

Part1 :'{"commands":["count=4; for i in { 1..$count }; do echo $i; ssh $(server_$i) bash -c ' Part2: "'echo $i && echo $(date +%Y-%m-%d)'" 第 3 部分:';完成;"],"执行超时":["3600"]}'

现在你能明白为什么它总是 4。

在第二部分中,$i 直接展开。在你执行循环之后,你的 $i 不是本地的,并且在你执行之后(第一次可能不成功),你现在在你的 shell 中 $i=4。

【讨论】:

  • 修复很简单。在第 2 部分中,您需要文字 ",因此不要使用 ' 来引用它,因为您处于单引号环境中。使用反斜杠将使其工作。 ws ssm send-command --document-name "AWS-RunShellScript" --instance-ids $instance_id \ --parameters '{"commands":["count=4; for i in { 1..$count }; do echo $i; ssh $(server_$i) bash -c \"echo $i && echo $(date +%Y-%m-%d)\"; done;"],"executionTimeout":["3600"]}' \ --timeout-seconds 600 --region us-west-2
猜你喜欢
  • 2015-03-29
  • 1970-01-01
  • 2020-12-04
  • 2014-02-11
  • 2019-11-14
  • 2022-01-08
  • 2010-12-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多