Apakah mungkin untuk mendapatkan penanganan nama file case-sensitive di Cygwin 64-bit yang berjalan pada Windows 7 Professional 64-bit?

3

Saya telah menggunakan Cygwin 32-bit pada Windows 7 Professional 64-bit. Saya memiliki HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\ObCaseInsensitiveset kunci registri dan semuanya baik-baik saja: Saya bisa mendapatkan penanganan nama file case-sensitive, saya bisa membuat FOO.txtdan foo.txtdalam direktori yang sama.

Sekarang Cygwin 64-bit dirilis, saya ingin mencobanya di Windows 7 Professional 64-bit. Ternyata kunci registri ObCaseInsensitive tidak memiliki efek untuk Cygwin 64-bit karena kuncinya tampaknya hanya untuk subsistem Win32. Subsistem untuk Aplikasi berbasis UNIX (SUA) juga tidak tersedia di Windows 7 Professional 64-bit (Diperlukan Enterprise atau Ultimate). Bahkan, saya bahkan tidak tahu apakah menginstal SUA akan membantu sama sekali.

Adakah yang tahu apakah mungkin untuk mendapatkan penanganan nama file case-sensitive dengan Cygwin 64-bit pada Windows 7 Professional 64-bit?

Kal
sumber

Jawaban:

2

Sensitivitas kasus berfungsi pada x86_64-cygwin. Ingat bahwa pada sistem Windows 64-bit, ada dua pendaftar yang efektif, satu untuk proses 32-bit dan satu lagi untuk proses 64-bit. (Di Cygwin, ini diwakili oleh /proc/registry32dan /proc/registry64.) Mengatur kunci lagi dengan regtool -wdan me-reboot harus memperbaiki ini untuk Anda.

Yaakov
sumber
MEA Culpa. Tes lebih lanjut mengkonfirmasi bahwa ObCaseInsensitivekunci memang berpengaruh pada Cygwin 64-bit: Saya bisa echo 'FOO' > FOO.txt; echo 'bar' > foo.txtdan membuat dua file yang berbeda. Masalahnya tampaknya dengan git. gitdi Cygwin 64-bit tampaknya tidak ditambal untuk memiliki nama file yang benar case-sensitive, meskipun ObCaseInsensitivekunci registri telah ditetapkan.
Kal
0

Anda dapat mendefinisikan fungsi yang memeriksa kasus direktori target (tanpa harus mengubah Registry Windows). Dengan cara ini, saya memiliki dalam ~/.bash_functionsfile kode berikut:

unset cd_func2 2> /dev/null
unalias cd 2> /dev/null
cd_func2 () {

    echo $1 | grep -q '^/' && cd $1 && return 0
    for f in `echo $1 | sed -e 's/\// /g'` ; do
        _NEW_PATH=$(ls -a | grep -i ^"$f"$)
        [ "$_NEW_PATH" ] && cd $_NEW_PATH && continue
        echo "Directori inexistent $f" && return 1
    done
}

alias cd=cd_func2

EDIT: Penanganan parameter yang lebih umum.

Semoga ini bisa membantu.

ATORRA
sumber