Windows PATH以bash中的posixpath转换

我怎么能通过标准的msysfunction(如果不是失去了普遍性) Windows目录path(如c:/libs/Qt-static )转换到正确的POSIX dirpath( /c/libs/Qt-static ) ? 反之亦然(特别是intrested)?

我不知道msys ,但一个快速的谷歌搜索显示,它包括sed实用程序。 所以,假设它在msys工作方式与在本地Linux上的工作方式类似, msys是一种方法:

从Windows到POSIX

您将不得不用斜杠替换所有反斜杠,删除驱动器号后的第一个冒号,并在开头添加一个斜杠:

 echo "/$pth" | sed 's/\\/\//g' | sed 's/://' 

或者,如xaizek所述,

 echo "/$pth" | sed -e 's/\\/\//g' -e 's/://' 

从POSIX到Windows

您将不得不添加一个分号,删除第一个斜杠并用反斜杠替换所有的斜杠:

 echo "$pth" | sed 's/^\///' | sed 's/\//\\/g' | sed 's/^./\0:/' 

或更有效地,

 echo "$pth" | sed -e 's/^\///' -e 's/\//\\/g' -e 's/^./\0:/' 

其中$pth是存储Windows或POSIX路径的变量。

你在cygwin上使用它吗? 如果是,那么在cygwin包中有一个名为cygpath.exe的现成工具,只是为了做到这一点。

输出类型选项:
   -d,--dos打印DOS(简称)形式的NAME(C:\ PROGRA〜1 \)
   -m, - 像--windows混合,但用正则斜杠(C:/ WINNT)
   -M, - 模式文件模式(binmode或textmode)
   -u,--unix(默认)打印NAME的Unix形式(/ cygdrive / c / winnt)
   -w,--windows打印Windows窗体的名称(C:\ WINNT)
   -t,--type TYPE print TYPE形式:'dos','mixed','unix'或'windows'

这是我的实现(在git bash上测试)。

从POSIX到Windows

 sed ' \,/$, !s,$,/, \,^/, s,/,:/,2 s,^/,, s,/,\\,g ' <<< "$@" 

效劳于:

 /c/git relative/dir c:/git ~ . .. /c /c/ ./relative/dir /sd0/some/dir/ 

 / <path with space> 

说明:

\,^/, s,/,:/,2 (转换/drive/dir/ to /drive:/dir/ )是它的核心,并在第二个/之前插入。 为了可读性,我使用delim来代替/ 如果以/\,^/, )开头,则用/替换:/为第二个出现。 我不想假定驱动器字母长度为1,所以这适用于/sd0/some/dir

s,^/,,删除前面的/s,/,\\,g将all /转换为\

\,/$, !s,$,/,是处理/c的转角情况,并确保第二个//c/ )为下一个命令工作。

注意:

如果这里string <<<在你的shell中不起作用,那么你可以echo和pipe as

 echo "$@" | sed ... 

勘误表

这里是脚本