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,使得禁用路径转换的解决方案 - 到目前为止- 更好的选择。
我有一个 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,使得禁用路径转换的解决方案 - 到目前为止- 更好的选择。