2012-01-20 24 views
5

Tôi muốn làm mới môi trường cygwins sau khi thực hiện VARNAME VARVALUE (đường dẫn đặc biệt).Làm mới biến môi trường của người dùng Windows trong cygwin

'xuất VARNAME = VARVALLUE' không phải là một tùy chọn vì tôi cần phải chuyển đổi giá trị được xuất nếu đó là đường dẫn (với định dạng giống UNIX), nhưng VARNAME có thể là đường dẫn hay không.

Tôi muốn chạy setx và sau đó làm mới môi trường để cygwin thực hiện các phép biến đổi tương ứng nếu VARNAME là PATH.

+0

Cuối cùng tôi đã làm nó bằng cách sử: ** xuất khẩu $ {var_name} = "' truy vấn reg HKCU \\ Môi trường/v $ {var_name} | grep $ {var_name} | cắt -c23- | cygpath -pu '"; ** Nó không sạch nhưng nó hoạt động trong hầu hết các trường hợp. Nếu VARVALUE không phải là đường dẫn đường dẫn sẽ không thay đổi trừ khi nó trông giống như một đường dẫn nhưng nó không nên thay đổi, trong trường hợp đó nó sẽ làm mọi thứ rối loạn nhưng đó không phải là một tình huống phổ biến – aitorpazos

Trả lời

3

Để xây dựng câu trả lời của Apiman, có nhiều khả năng nói chung bạn sẽ tìm thấy PATH trong HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment thay vào đó, chứa PATH của hệ thống thay vì PATH của người dùng. Tôi cũng đã thực hiện một số chỉnh sửa bên dưới.

Run này trong môi trường Cygwin để nạp hệ thống PATH Windows (hoặc các biến môi trường khác bằng cách thay đổi var_name)

export var_name="PATH" 
export $var_name="$(cygpath -pu "`reg query 'HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment' /v $var_name | grep $var_name | cut -c23-`")" 

Tất nhiên với các mã trên, các cửa sổ PATH sẽ thay thế PATH địa phương, làm cho bạn mất quyền truy cập vào Cygwin/bin và những người khác. Thay vào đó, bạn có thể muốn nối Windows PATH vào Cygwin PATH:

export PATH="$PATH:$(cygpath -pu "`reg query 'HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment' /v PATH| grep PATH | cut -c23-`")" 
+0

'cut' không hoạt động đối với tôi. Trong Win7 của tôi, có 30 ký tự trước 'Path thực'. Tôi đã sử dụng điều này thay vì '' 'xuất PATH =" $ PATH: $ (truy vấn cygpath -pu "' truy vấn 'HKLM \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment' /v PATH | grep PATH | sed 's | \ + | | g '| cut -d "" -f4-'") "' '' – Sungam

0

Đã thêm nhận xét ở trên nhưng định dạng không tốt. Đăng lại ở đây.

Câu trả lời của @nilbus 'cut không hoạt động đối với tôi. Trong Win7 của tôi, có 30 ký tự trước real Path. Tôi sử dụng này để thay thế

export PATH="$PATH:$(cygpath -pu "`reg query \ 
'HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment' \ 
/v PATH|grep PATH|sed 's| \+| |g'|cut -d" " -f4-`")" 
Các vấn đề liên quan