如何防止MSYS转换外部程序的文件路径

问题描述 投票:6回答:3

我正在将Linux脚本移植到Windows和MinGW,后者通过ADB访问Android手机。

有时我需要将Android的文件路径作为ADB命令行选项传递。

但是,当调用ADB.exe时,MinGW会将其转换为Windows的路径。

例如,

adb shell cat /proc/version

翻译如下,在Android中导致“没有这样的文件或目录”错误。

adb shell cat C:/Program Files (x86)/Git/proc/version

我发现双引号可以防止这种情况。

adb shell "cat /proc/version"

但是是否有全局标记或env变量来阻止MinGW进行此对话?

我正在使用的MinGW附带了“用于Windows的Git”软件包。

编辑:我也遇到了另一个问题,我无法解决双引号。

$ adb push test1.mp3 /data
failed to copy 'test1.mp3' to 'C:/Program Files (x86)/Git/data': No such file or directory

$ adb push test1.mp3 "/data"
failed to copy 'test1.mp3' to 'C:/Program Files (x86)/Git/data': No such file or directory
mingw filepath mingw-w64
3个回答
4
投票

但是是否有任何全局开关或env变量来防止MinGW用于此转换?

是。使用此环境变量:

MSYS_NO_PATHCONV=1

例如

MSYS_NO_PATHCONV=1 adb shell cat /proc/version

注意:程序可能无法正常运行,它们需要Windows路径。

要解决此问题,您可以使用documentation page上提到的转义(看底部):

adb shell cat //proc\version

规则:参数的第一个/复制,其余/替换为\

取决于所使用的转义符(例如,.sh脚本中的转义符,您可能需要复制\字符:

adb shell cat //proc\\version

这样,仅传递带有额外的/前缀的参数you,而不会转换为Windows路径。


4
投票

刚发现以双斜杠开头就是魅力。

http://www.mingw.org/wiki/Posix_path_conversion

[以2或更大/开头的参数被认为是Windows样式的转义字符,将在删除前导/并将所有\更改为/的情况下传递。

除非在/的前导块之后有/,否则该参数被视为UNC路径,并且不删除前导/

| Argument from MSYS program | Sent to native Windows program as | Sent to native Windows program as
| //foobar                   | /foobar                           | double /  prevents conversion
| //foo\bar                  | /foo/bar                          | \  converted to /
| //foo/bar                  | //foo/bar                         | interpreted as UNC path, leading /  not removed

0
投票

请,我们可以在这里得到术语吗? MinGW不执行您所描述的路径转换;它是由MinGW.org提供的MSYS构建环境,它是MinGW的伴侣,可以做到这一点,所以我猜您实际上正在使用Windows的Git随附的MSYS版本。

我很高兴您找到了适合您的情况的魔术子弹,但是请注意,在某些极端情况下,这种“双斜杠”技巧还不够;如果遇到其中一种,则不妨考虑将Cygwin用作Windows上的替代托管外壳。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.