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

时间:2015-02-16 02:23:53

标签: mingw filepath mingw-w64

我将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"

但是否有任何全局siwtches或env变量来阻止MinGW进行此转换?

我使用的MinGW附带了" Git for Windows"封装

编辑:我也打了另一个scnario,我不能用双引号解决。

$ 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

3 个答案:

答案 0 :(得分:4)

刚刚发现双斜线就是魅力。

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

答案 1 :(得分:2)

  

但是有没有任何全局开关或env变量来阻止MinGW   这个转换?

是。使用此环境变量:

MSYS_NO_PATHCONV=1

e.g。

MSYS_NO_PATHCONV=1 adb shell cat /proc/version

注意:程序可能无法正常运行,他们期望Windows路径。

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

adb shell cat //proc\version

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

根据使用的转义(例如在.sh脚本中),您可能需要复制\字符:

adb shell cat //proc\\version

这样,只有用额外的/前缀写的参数才会被传递,而不会转换为Windows路径。

答案 2 :(得分:0)

拜托,我们可以在这里获得术语吗? MinGW没有路径翻译,例如你描述的;它是由MinGW.org作为MinGW的伴侣提供的 MSYS 构建环境,这样做,所以我猜你实际上是在使用Git for Windows提供的MSYS版本。

我很高兴您找到了适用于您的情况的神奇子弹,但请注意,在某些极端情况下,此次"双击"诀窍不够;如果您遇到其中一个,您可能希望将Cygwin视为Windows上的替代托管shell。