Windows git bash在调用AWS CLI时尝试将字符串解析为文件

zsohkypk  于 2023-01-18  发布在  Windows
关注(0)|答案(2)|浏览(130)

我有一个AWS SSM CLI命令的字符串参数,由于以/ . /path/to/my/param开头,因此看起来像是文件的路径。
当我在git bash上运行这个命令时,不管我怎么转义它,它都会试图找到这个文件:
aws ssm get-parameter --name "/path/to/my/param"
aws ssm get-parameter --name '/path/to/my/param'
aws ssm get-parameter --name '\/path\/to\/my\/param'
An error occurred (ValidationException) when calling the GetParameter operation: Invalid label format /Program Files/Git/path/to/my/param. A label name can't be prefixed with numbers, "ssm", or "aws" (case-insensitive). You can specify letters, numbers, and the following symbols: period (.), dash (-), or underscore (_).
甚至尝试了回勾,然后我得到了一个bash错误

aws ssm get-parameter --name `/path/to/my/param`

错误:bash: /path/to/my/param: No such file or directory
如果我执行echo /asd/asd,它实际上输出/asd/asd,所以aws cli也可能是这样处理输入的。
有办法逃脱吗?

mbjcgjjk

mbjcgjjk1#

可以在MSYS2中关闭选定路径的路径转换(参见Msys2 Porting,文件系统名称空间部分)。
您也可以通过以下方式暂时禁用它:

MSYS2_ARG_CONV_EXCL="/aws" aws ssm get-parameter --name '/aws/path/to/my/param'
ffx8fchx

ffx8fchx2#

编辑:

在再次碰到这个问题后,这次是:aws logs describe-log-groups --log-group-name-prefix ...,我决定尝试“n”找到一个更可持续的解决方案。
我发现了一个如此的职位,提供了一个根本问题的解释,以及我认为是一个更好的解决办法,即:

MSYS_NO_PATHCONV=1 aws ...

这适用于在Windows上从Git Bash调用时遇到此正斜杠问题的任何aws cli命令。
荣誉当然归:https://stackoverflow.com/a/56034540
看起来我的第一个答案恰好适用于aws ssm get-parameter,因为cli的这一部分在返回所需值方面更宽容一些,即使在提供前导空格时也是如此。* 然而 *,在进一步检查返回值时,我注意到返回参数的名称也包含前导空格,使得禁用路径转换的解决方案到目前为止是更好的选择。

原始答案:

如果将来有人遇到此问题:
我抓着救命稻草随机地设法解决了它。
对我来说,诀窍是在用双引号将参数名括起来后,在第一个正斜杠前加一个空格,即:

aws ssm get-parameter --name " /path/to/my/param"

(The GitHub的问题,导致我尝试它:https://github.com/bmatzelle/gow/issues/196

相关问题