Windows & Git Bash: Bash PATH untuk membaca Windows% PATH% variabel sistem

27

Saya baru-baru ini menambahkan direktori ke PATH Windows secara manual dengan masuk ke Control Panel -> System -> Pengaturan sistem lanjutan -> Variabel Lingkungan -> Variabel pengguna -> PATH. (Windows 7, 64-bit.)

Setelah mem-boot ulang dan memulai cmd.exe, echo %PATH%menunjukkan bahwa ini berhasil: Saya melihat direktori yang baru saja saya tambahkan di output.

Namun, setelah memulai Git Bash, output dari echo $PATHtidak termasuk direktori ini.

Saya bisa menambahkan export PATH=$PATH:/c/my/pathdi bashrc saya tapi saya lebih suka Git Bash hanya mendapatkan PATH dari Windows jadi saya tidak harus ingat untuk menambahkan path ke dua tempat. Bagaimana ini bisa dicapai?

(Pertanyaan terkait yang lebih umum adalah, apa yang membuat $ PATH Git Bash? Saya melihat beberapa entri diulang di tempat yang berbeda, beberapa hal yang ada di Windows% PATH% ada di $ PATH Git Bash tetapi tidak pada yang lain. Apa yang terjadi sebelumnya Saya mendapatkan prompt Git Bash yang menyentuh $ PATH?)

Ahmed Fasih
sumber
Jalur tersebut mungkin penting: C:\cygwin\usr\x86_64-w64-mingw32\sys-root\mingw\bin.
Ahmed Fasih

Jawaban:

6

Sesi msysgit git bash menggunakan skrip share/WinGit/Git Bash.vbs, yang tidak mengakses atau memodifikasi variabel lingkungan PATH(seperti dalam skrip vbs yang tidak terkait ini, misalnya )

Sesi git bash hanya akan menambahkan di depan Anda saat ini PATH:

.:/usr/local/bin:/mingw/bin:/bin:

Ada kemungkinan bahwa sesi mingw yang dikemas dengan msysgit tidak akan mempertimbangkan bindari instalasi mingw lain: Anda dapat memeriksanya dengan mengatur direktori lain (lebih sederhana) ke Anda PATHdan melihat apakah masih terlihat di sesi bash git Anda. Jika tidak, maka itu adalah masalah yang lebih umum yang menyangkut semua direktori yang akan Anda tambahkan ke PATH.

VONC
sumber
1
Ini sepertinya tidak benar. Ketika saya mulai git bash, path-nya diatur oleh beberapa proses yang tampaknya mengubah variabel Windows PATH melalui beberapa proses. Tidak sesederhana menambahkan item tambahan: ';' diterjemahkan ke ':', penentu drive dikonversi ke nama direktori, dan beberapa konversi lainnya juga terjadi. Dalam beberapa kasus, konversi ini salah - "c:\Program Files\Java\jdk1.8.0_25"\bindi path windows saya dikonversi ke /c/Program Files/Java/jdk1.8.0_25"/bidalam git bash path (perhatikan karakter pertama dan terakhir yang hilang) ... jadi pertanyaannya adalah, bagaimana ini terjadi?
Jules
@ Jules Itu memang mungkin. Banyak yang telah berubah dalam 5 tahun.
VonC
5

Inilah solusi kecil saya untuk masalah yang sama (MSYS2 bash pada Windows 10).

Idenya adalah untuk mengubah jalur yang diperlukan untuk jalur gaya Unix dan menambahkannya ke bash $ PATH, semua dilakukan dalam .bashrc.

Jangan tambahkan jalur yang diperlukan untuk Menangkan PATH. Alih-alih membuat env var baru di Windows, seperti MSYS2_WINPATH, dan menambahkan semua direktori jalur Windows yang dipisahkan titik koma ke variabel ini. Tambahkan% MSYS2_WINPATH% menjadi% PATH%.

Sekarang masukkan ini dalam .bashrc Anda -

################################## Construct PATH variable ##################################

winpath=$(echo $MSYS2_WINPATH | tr ";" "\n" | sed -e 's/\\/\\\\/g' | xargs -I {} cygpath -u {})
unixpath=''

# Set delimiter to new line
IFS=$'\n'

for pth in $winpath; do unixpath+=$(echo $pth)":"; done

export PATH=$(echo $PATH:$unixpath | sed -e 's/:$//g')
unset IFS
unset unixpath
unset winpath

################################# Constructed PATH variable #################################
anubhav
sumber
Sudah mencoba itu di git-bash dan berhasil tanpa solusi untuk .bashrc. Terima kasih!
Michael Haidl
Senang mendengarnya :) Terima kasih.
anubhav
2

Jika nilai PATH akan terlalu lama setelah variabel PATH pengguna Anda telah digabungkan ke variabel PATH lingkungan, Windows akan diam-diam gagal menggabungkan variabel PATH pengguna.

Ini dapat dengan mudah terjadi setelah perangkat lunak baru diinstal dan menambahkan sesuatu ke PATH, sehingga merusak perangkat lunak yang diinstal yang ada. Windows gagal!

Perbaikan terbaik adalah mengedit salah satu variabel PATH di Panel Kontrol dan menghapus entri yang tidak Anda butuhkan. Kemudian buka jendela CMD baru dan lihat apakah semua entri ditampilkan dalam "echo% PATH%".

Tony OHagan
sumber
1

Coba pindahkan direktori ke awal variabel path Anda. Saya memiliki masalah yang sama dengan Anda setelah menginstal p4merge. Direktori perforce ditambahkan ke path dan p4merge ditemukan oleh cmd.exe, tetapi bukan git shell (mingw). Setelah pencarian sia-sia, saya mencoba hanya mengedit variabel sehingga direktori perforce muncul pertama kali di jalur saya. Saya menyalakan git shell dan, voila, direktori termasuk dalam output dari $ echo $path, dan $ p4mergemembuka p4merge.

Ini adalah semacam jawaban yang lemah, karena saya tidak mengerti mengapa itu bekerja, tetapi jika bekerja membantu orang lain, bagus.

gilly3
sumber