我试图在Fargate ECS任务(aws)上运行一个命令,并捕获它的退出代码。
在aws cli ecs执行命令子命令中有一个已知的错误,它阻止我从命令本身获取退出状态,而是返回aws cli会话管理器插件底层的退出状态,更多关于您可以读取这里的信息。
毕竟,为了获得退出状态,我正在用几种方式测试它,使用"ls -l“而不是我需要使用的原始命令。
这是我正在运行的命令(它运行在一个运行Ubuntu20.04的自我托管的Github运行器上):
unbuffer aws ecs execute-command \
--region eu-west-1 \
--cluster qa-devops-1-productname \
--task b75a377a63f44938ae7bacc50c852723 \
--container ops-machine \
--command 'sh -c "ls -l /productname ; echo $?"' \
--interactive > some.log
grep -vi session some.log | sed -e '/^$/d' | tail -1 当我在终端上运行这个命令时,当我使用SSH连接到(自我托管的) Github实例时:
ubuntu@ip-10-16-12-250:~$ unbuffer aws ecs execute-command --region eu-west-1 --cluster qa-devops-1-productname --task b75a377a63f44938ae7bacc50c852723 --container ops-machine --command 'sh -c "ls -l /productname ; echo $?"' --interactive > some.log ; grep -vi session some.log | sed -e '/^$/d' | tail -1
0正如您在上面的示例中所看到的,该命令成功地输出了退出状态。
接下来,我想将输出插入一个名为“result”的变量中:
ubuntu@ip-10-16-12-250:~$ result=$(unbuffer aws ecs execute-command --region eu-west-1 --cluster qa-devops-1-productname --task b75a377a63f44938ae7bacc50c852723 --container ops-machine --command 'sh -c "ls -l /productname ; echo $?"' --interactive > some.log ; grep -vi session some.log | sed -e '/^$/d' | tail -1)
ubuntu@ip-10-16-12-250:~$ echo $result
0但是,当我将其放在脚本中并使用调试属性(bash -x)运行它时,请查看$result的内容:
ubuntu@ip-10-16-12-250:~$ ./1.sh
++ unbuffer aws ecs execute-command --region eu-west-1 --cluster qa-devops-1-productname --task b75a377a63f44938ae7bacc50c852723 --container ops-machine --command 'sh -c "ls -l /productname ; echo $?"' --interactive
++ tail -1
++ sed -e '/^$/d'
++ grep -vi session some.log
+ result=$'0\r'
-ne 0 ]]
")syntax error: invalid arithmetic operator (error token is "
+ echo 'equals 0'
equals 0由于某种原因,结果变量包含"$' 0 \r'“,而不是仅包含0。
也尝试过这样做:
ubuntu@ip-10-16-12-250:~$ ./1.sh
++ unbuffer aws ecs execute-command --region eu-west-1 --cluster qa-devops-1-productname --task b75a377a63f44938ae7bacc50c852723 --container ops-machine --command 'sh -c "ls -l /productname ; echo $?"' --interactive
++ tail -1
++ sed -e '/^$/d'
++ grep -vi session some.log
+ result=$'0\r'
++ grep -E '[0-9]{1,3}'
++ echo $'0\r'
-ne 0 ]]
")syntax error: invalid arithmetic operator (error token is "
+ echo 'equals 0'
equals 0那是什么原因呢?如何确保结果只包含正确的数字而没有其他内容?
发布于 2022-04-26 14:29:19
将result声明为整数,并让bash为您完成以下工作:
> declare -i result
> result=$(unbuffer aws ecs execute-command --region eu-west-1
--cluster qa-devops-1-productname --task b75a377a63f44938ae7bacc50c852723
--container ops-machine --command 'sh -c "ls -l /productname ; echo $?"'
--interactive > some.log;
grep -vi session some.log | sed -e '/^$/d' | tail -1)
> [ ${result -eq 0 ] && echo "Success" || echo "Failure"https://stackoverflow.com/questions/72013893
复制相似问题