Windows dirパスを変換するにはどうすればよいですか(c:/libs/Qt-static
)を正しい[〜#〜] posix [〜#〜] dir path(/c/libs/Qt-static
)標準msys機能を使用して?およびその逆?
msys
はわかりませんが、簡単なGoogle検索でsed
ユーティリティが含まれていることがわかりました。したがって、msys
での動作がネイティブLinuxでの動作と同じであると想定すると、次の方法で実行できます。
すべてのバックスラッシュをスラッシュに置き換え、ドライブ文字の後の最初のコロンを削除し、最初にスラッシュを追加する必要があります。
echo "/$pth" | sed 's/\\/\//g' | sed 's/://'
または、xaizekが述べたように、
echo "/$pth" | sed -e 's/\\/\//g' -e 's/://'
セミコロンを追加し、最初のスラッシュを削除して、すべてのスラッシュをバックスラッシュで置き換える必要があります。
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(ショート)形式の名前を出力します(C:\ PROGRA〜1 \) -m、--mixed like- -windows、ただし通常のスラッシュ(C:/ WINNT) -M、-modeファイルのモードに関するレポート(binmodeまたはtextmode) -u、--unix(デフォルト)print Unix NAMEの形式(/cygdrive/c/winnt) -w、--windows print Windows form of NAMEs(C:\ WINNT) -t、--type TYPE print TYPE form: ' dos」、「mixed」、「unix」、または「windows」
これが私の実装です(git bashでテスト済み)。
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/
に変換)はその中心であり、:
を2
nd /
の前に挿入します。読みやすさのために,
ではなく/
をdelimに使用します。 /
(\,^/,
)で始まる場合は、/
を:/
ndオカレンスの2
に置き換えます。ドライブ文字の長さを1と想定したくないので、これは/sd0/some/dir
で機能します。
s,^/,,
は先頭の/
を削除し、s,/,\\,g
はすべての/
を\
に変換します。
\,/$, !s,$,/,
は、/c
のコーナーケースを処理し、次のコマンドが機能するように2番目の/
(/c/
)を確保するためのものです。
注意:
ここで文字列<<<
がシェルで機能しない場合は、echo
としてパイプして
echo "$@" | sed ...
正誤表
ここに eスクリプト
MSYSの「正しい」方法は次のとおりです。
$ MSYS_NO_PATHCONV=1 taskkill /F /T /IM ssh-agent.exe
これにより、スラッシュを手動で変換する必要がなくなります。単にパス変換を無効にします。