-1

我正在使用 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

4

1 回答 1

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。

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

于 2018-12-29T07:55:46.483 回答