Windows & Git Bash: Bash PATH để đọc biến hệ thống Windows% PATH%


27

Gần đây tôi đã thêm một thư mục vào Windows PATH bằng cách vào Bảng điều khiển -> Hệ thống -> Cài đặt hệ thống nâng cao -> Biến môi trường -> Biến người dùng -> PATH. (Windows 7, 64-bit.)

Sau khi khởi động lại và bắt đầu cmd.exe, echo %PATH%chỉ ra rằng điều này đã hoạt động: Tôi thấy thư mục tôi đã thêm gần đây trong đầu ra.

Tuy nhiên, sau khi bắt đầu Git Bash, đầu ra của echo $PATHkhông bao gồm thư mục này.

Tôi có thể thêm export PATH=$PATH:/c/my/pathvào bashrc của mình nhưng tôi muốn Git Bash chỉ lấy PATH từ Windows để tôi không phải nhớ thêm đường dẫn đến hai nơi. Làm thế nào điều này có thể được thực hiện?

(Một câu hỏi liên quan tổng quát hơn là, cái gì tạo ra $ PATH của Git Bash? Tôi thấy một vài mục được lặp lại ở những nơi khác nhau, một số thứ trong Windows% PATH% nằm trong $ PATH của Git Bash chứ không phải những thứ khác. Tôi nhận được lời nhắc Git Bash chạm $ PATH?)


Đường dẫn trong câu hỏi có thể quan trọng : C:\cygwin\usr\x86_64-w64-mingw32\sys-root\mingw\bin.
Ahmed Fasih

Câu trả lời:


6

Một phiên bash msysgit sử dụng tập lệnh share/WinGit/Git Bash.vbs, không truy cập hoặc sửa đổi biến môi trường PATH(ví dụ như trong tập lệnh vbs không liên quan này )

Một phiên git bash sẽ chỉ cần thêm vào trước hiện tại của bạn PATH:

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

Có thể phiên mingw được đóng gói với msysgit sẽ không xem xét bintừ cài đặt mingw khác: bạn có thể kiểm tra nó bằng cách đặt thư mục khác (đơn giản hơn) cho bạn PATHvà xem liệu nó có còn hiển thị trong phiên git bash của bạn không. Nếu không, thì đó là một vấn đề chung hơn liên quan đến tất cả các thư mục mà bạn sẽ thêm vào PATH.


1
Điều này dường như không đúng. Khi tôi bắt đầu git bash, đường dẫn của nó được thiết lập bởi một số quy trình dường như chuyển đổi biến Windows PATH thông qua một số quy trình. Nó không đơn giản như thêm các mục bổ sung: ';' được dịch thành ':', các chỉ định ổ đĩa được chuyển đổi thành tên thư mục và một số chuyển đổi khác cũng đang diễn ra. Trong một số trường hợp, chuyển đổi này là sai - "c:\Program Files\Java\jdk1.8.0_25"\bintrong đường dẫn windows của tôi được chuyển đổi thành /c/Program Files/Java/jdk1.8.0_25"/bitrong đường dẫn git bash (lưu ý thiếu ký tự đầu tiên và cuối cùng) ... vậy câu hỏi là, điều này xảy ra như thế nào?
Jules

@Jules Điều đó thực sự có thể. Rất nhiều thứ đã thay đổi sau 5 năm.
VonC

5

Đây là cách giải quyết nhỏ của tôi cho một vấn đề tương tự (MSYS2 bash trên Windows 10).

Ý tưởng là chuyển đổi các đường dẫn cần thiết thành các đường dẫn kiểu Unix và nối chúng vào bash $ PATH, tất cả được thực hiện trong .bashrc.

Không nối các đường dẫn cần thiết để giành chiến thắng. Thay vào đó, hãy tạo một var env mới trong Windows, như MSYS2_WINPATH và nối tất cả các thư mục đường dẫn Windows được phân tách bằng dấu chấm phẩy vào biến này. Nối% MSYS2_WINPATH% vào% PATH%.

Bây giờ chèn cái này vào .bashrc của bạn -

################################## 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 #################################

Đã thử rằng trong git-bash và nó hoạt động mà không có cách giải quyết cho .bashrc. Cảm ơn!
Michael Haidl

thật tốt khi nghe điều đó :) bạn được chào đón.
anubhav

2

Nếu giá trị PATH sẽ quá lâu sau khi biến PATH của người dùng của bạn được nối vào biến PATH của môi trường, Windows sẽ âm thầm thất bại trong việc ghép biến PATH của người dùng.

Điều này có thể dễ dàng xảy ra sau khi phần mềm mới được cài đặt và thêm một cái gì đó vào PATH, do đó phá vỡ phần mềm đã cài đặt hiện có. Windows thất bại!

Cách khắc phục tốt nhất là chỉnh sửa một trong các biến PATH trong Bảng điều khiển và xóa các mục bạn không cần. Sau đó mở một cửa sổ CMD mới và xem liệu tất cả các mục được hiển thị trong "echo% PATH%".


1

Hãy thử di chuyển thư mục đến đầu biến đường dẫn của bạn. Tôi gặp vấn đề tương tự như bạn sau khi cài đặt p4merge. Thư mục perforce đã được thêm vào đường dẫn và p4merge được tìm thấy bởi cmd.exe, nhưng không phải là git shell (mingw). Sau khi tìm kiếm không có kết quả, tôi đã thử chỉ chỉnh sửa biến để thư mục perforce xuất hiện đầu tiên trong đường dẫn của tôi. Tôi đã kích hoạt shell git và, voila, thư mục được bao gồm trong đầu ra của $ echo $path, và $ p4mergemở p4merge.

Đây là một câu trả lời khập khiễng, vì tôi không biết tại sao nó hoạt động, nhưng nếu công việc giúp đỡ người khác, thật tuyệt.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.