Ton*_*ony 9 mingw filepath mingw-w64
我正在将 Linux 脚本移植到 Windows 和 MinGW,它通过 ADB 访问 Android 手机。
有时我需要将 Android 的文件路径作为 ADB 命令行选项传递。
但是,在调用 ADB.exe 时,MinGW 会将其转换为 Windows 的路径。
例如,
adb shell cat /proc/version
Run Code Online (Sandbox Code Playgroud)
翻译如下,导致Android中出现“No such file or directory”错误。
adb shell cat C:/Program Files (x86)/Git/proc/version
Run Code Online (Sandbox Code Playgroud)
我发现双引号有助于防止这种情况。
adb shell "cat /proc/version"
Run Code Online (Sandbox Code Playgroud)
但是是否有任何全局 siwtches 或 env 变量来阻止 MinGW 进行此转换?
我正在使用的 MinGW 带有“Git for Windows”包。
编辑:我还遇到了另一个 snario,我无法解决双引号问题。
$ 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
Run Code Online (Sandbox Code Playgroud)
但是是否有任何全局开关或环境变量来阻止 MinGW 进行此转换?
是的。使用这个环境变量:
MSYS_NO_PATHCONV=1
Run Code Online (Sandbox Code Playgroud)
例如
MSYS_NO_PATHCONV=1 adb shell cat /proc/version
Run Code Online (Sandbox Code Playgroud)
当心:程序可能无法正常工作,他们期望 Windows 路径。
要解决此问题,您可以使用文档页面上提到的转义(查看底部):
adb shell cat //proc\version
Run Code Online (Sandbox Code Playgroud)
规则:第/一个参数重复,其余/替换为\
根据使用的转义(例如在 .sh 脚本中),您可能需要复制\字符:
adb shell cat //proc\\version
Run Code Online (Sandbox Code Playgroud)
这样,只会传递您使用额外/前缀编写的参数,而不会转换为 Windows 路径。
刚发现开始双斜线是魅力。
https://web.archive.org/web/20201112005258/http://www.mingw.org/wiki/Posix_path_conversion
以 2 或更多开头的参数
/被认为是转义的 Windows 样式开关,将在/删除前导并全部\更改为/.除了如果
/的前导块后面有一个/,则该参数被认为是 UNC 路径,并且/不会删除前导。Run Code Online (Sandbox Code Playgroud)| 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
| 归档时间: |
|
| 查看次数: |
4731 次 |
| 最近记录: |