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

Windows git bash tries to resolve string as file when calling AWS CLI

我有一个 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 处理输入的方式。

知道如何逃脱吗?

可以在 MSYS2 中为选定的路径关闭路径转换(参见 Msys2 Porting,文件系统命名空间部分)。

您也可以通过以下方式暂时禁用它:

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

尝试第一个答案之前检查编辑!

以防以后有人遇到这个问题:

我是抓着救命稻草随机解的

我的诀窍是在用双引号括起参数名称后在第一个正斜杠前放一个 space,即:

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

(促使我尝试的 GitHub 问题:https://github.com/bmatzelle/gow/issues/196

编辑:

在再次遇到这个问题之后,但这次是为了:aws logs describe-log-groups --log-group-name-prefix ...,我决定尝试寻找更可持续的解决方案。

我找到了一个 SO post,它提供了对潜在问题的解释以及我认为更好的解决方法,即:

MSYS_NO_PATHCONV=1 aws ...

这适用于从 Windows Bash Windows 调用时遇到此正斜杠问题的任何 aws cli 命令。

荣誉当然去:

似乎我的第一个答案恰好适用于 aws ssm get-parameter,因为 cli 的那部分在 returns 所需值的意义上更宽容一些,即使在提供前导 space。 然而,在进一步检查返回值后,我回想起来发现返回参数的名称也包含前导space,使得禁用路径转换的解决方案 - 到目前为止- 更好的选择。