Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何修复使用ssh执行远程命令的循环_Bash_Aws Ssm - Fatal编程技术网

Bash 如何修复使用ssh执行远程命令的循环

Bash 如何修复使用ssh执行远程命令的循环,bash,aws-ssm,Bash,Aws Ssm,我正在使用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_

我正在使用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
Expect:两者都应返回1,2,3,4

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 现在你能明白为什么它总是4


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

请看:我已经编辑了这个问题,使用了代码格式(四个空格前缀),并将它分成三行w/连续体,而不是一个长的行;这不应该改变意思。但结果仍然很难理解。在我看来,您至少有引用问题:您似乎试图将单引号字符串嵌套在另一个单引号字符串中,而这根本不起作用。顺便说一句,
{1..$count}
也是无效的shell语法,因为大括号在替换变量之前会被展开。Bash命令行中的引号显然被打断了,但我无法理解代码的真正用途。你能解释一下它应该做什么吗,或者是显示一个本地工作脚本的问题吗?修复非常简单。在第2部分中,您需要literal
”,因此不要使用
来引用它,因为您处于单引号环境中。使用反斜杠将使其工作。
ws-ssm-send命令--文档名“AWS-RunShellScript”-instance-ids$instance\u-id\--参数“{”commands:[“count=4;对于{1..$count}中的i”;do echo$i;ssh$(server_$i)bash-c \“echo$i&&echo$(日期+%Y-%m-%d)\”完成;“],“executionTimeout”:[“3600”]}\--超时600秒--美国西部地区-2
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)'" Part3: '; done;"],"executionTimeout":["3600"]}'