3 ответов:
Я не знаю
msys, но быстрый поиск в google показал мне, что он включает в себя утилитуsed. Итак, предполагая, что он работает аналогично вmsys, чем в родной Linux, вот один из способов, как это сделать:Из Windows в POSIX
Вам придется заменить все обратные косые черты косыми чертами, удалить первое двоеточие после буквы диска и добавить косую черту в начале:
echo "/$pth" | sed 's/\\/\//g' | sed 's/://'Или, как отмечает хайзек,
echo "/$pth" | sed -e 's/\\/\//g' -e 's/://'Из POSIX в Windows
Вам придется добавить a точку с запятой, удалить первую косую черту и заменить все косые черты обратными косыми чертами:
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.Output type options: -d, --dos print DOS (short) form of NAMEs (C:\PROGRA~1\) -m, --mixed like --windows, but with regular slashes (C:/WINNT) -M, --mode report on mode of file (binmode or textmode) -u, --unix (default) print Unix form of NAMEs (/cygdrive/c/winnt) -w, --windows print Windows form of NAMEs (C:\WINNT) -t, --type TYPE print TYPE form: 'dos', 'mixed', 'unix', or '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/в/drive:/dir/) является его сердцем и вставляет:перед2nd/. Я использую,для delim вместо/для удобства чтения. Если начать с/(\,^/,), затем замените/на:/для2nd вхождения. Я не хочу предполагать, что длина буквы диска равна 1, поэтому это работает для/sd0/some/dir.
s,^/,,удаляет ведущий/иs,/,\\,gпреобразует все/в\.
\,/$, !s,$,/,это для обработки углового случая/cи обеспечения 2-го/(/c/) чтобы сработала следующая команда.Примечание:
Если здесь строка
<<<не работает в вашей оболочке, то вы можетеechoи трубить какecho "$@" | sed ...Errata
Здесь e script
Comments