我正在将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
但是是否有任何全局开关或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路径。
刚发现以双斜杠开头就是魅力。
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
请,我们可以在这里得到术语吗? MinGW不执行您所描述的路径转换;它是由MinGW.org提供的MSYS构建环境,它是MinGW的伴侣,可以做到这一点,所以我猜您实际上正在使用Windows的Git随附的MSYS版本。
我很高兴您找到了适合您的情况的魔术子弹,但是请注意,在某些极端情况下,这种“双斜杠”技巧还不够;如果遇到其中一种,则不妨考虑将Cygwin用作Windows上的替代托管外壳。