PATH và các biến môi trường khác là gì và làm cách nào tôi có thể đặt hoặc sử dụng chúng?


341

Câu hỏi về

  • thiết lập các biến môi trường
  • các PATH

rất phổ biến ở đây, và trong hầu hết các trường hợp, các câu trả lời rất giống nhau. Trong tương lai, thật tuyệt khi có một Q / A tốt cho việc này.

Vì vậy, câu hỏi là: các biến môi trường, như thực thi là gì PATHvà làm thế nào tôi có thể thay đổi và sử dụng chúng trên các hệ điều hành chính?

Một câu trả lời tốt sẽ bao gồm một lời giải thích đơn giản về các biến môi trường và đặc biệt PATHcó ý nghĩa gì đối với HĐH, cũng như các hướng dẫn đơn giản về cách đặt và đọc chúng cho phù hợp.


2
Mệt mỏi vì phải làm thủ công mỗi lần tôi cần, tôi đã viết một số mục đăng ký để thêm các mục menu ngữ cảnh cho AddToPath và RemoveFromPath vào các thư mục, sử dụng một ứng dụng miễn phí có tên pathed.exe. Sau đây là liên kết đến hướng dẫn đầy đủ: nghiệnivetips.com/ windows-tips/iêng Bây giờ tôi có thể dễ dàng thêm các thư mục vào biến PATH hoặc xóa chúng khỏi nó, mà không phải chỉnh sửa bất kỳ tệp nào hoặc lo lắng về việc làm rối định dạng của biến . Hy vọng nó giúp. =)
Haroon Q. Raja

1
Trên Windows có một lối tắt để mở thuộc tính của System tức là. Bảng điều khiển -> Hệ thống Phím WIN trên bàn phím + Tạm dừng / Nghỉ (THẮNG + Nghỉ). Điều này cực kỳ hữu ích và tăng tốc quá trình thiết lập các biến môi trường mới trên Win8 bởi vì bạn phải nhấp qua một số cửa sổ trong ui hiện đại (Vâng. Nếu nó hiện đại thì tôi sẽ trồng một cây xương rồng trên lòng bàn tay), điều này thật khó chịu. Tất nhiên, bạn có thể tạo tập lệnh powershell hoặc sử dụng lệnh setx và đừng lo lắng về nó nữa: D
termil0r

Trong Windows 8, điều hướng nhanh nhất để thay đổi các biến môi trường và hệ thống người dùng là sử dụng tìm kiếm. <kbd> Win </ kbd> + <kbd> W </ kbd> mang đến tìm kiếm cho tất cả các cài đặt. Tìm kiếm envvà các tùy chọn cần thiết được liệt kê.
FRIdSUN

Tôi nghĩ rằng nó nhanh hơn và rõ ràng hơn bằng cách mở CMDvà gõ set, hoặc PowerShellGet-Childitem env:.
paradroid

Nếu bạn đang chỉnh sửa biến đường dẫn rất nhiều (như khi thiết lập một hệ thống mới), có thể có một lối tắt đến hộp thoại Thuộc tính hệ thống trên màn hình nền. Để làm như vậy, nhấp chuột phải vào màn hình nền, chọn Lối tắt mới và nhập systemproperIESadvified.exe. Sau đó, bạn có thể nhấp vào liên kết để đến hộp thoại Thuộc tính hệ thống, sau đó nhấp vào Biến môi trường để đến hộp thoại với cài đặt đường dẫn.
Brian đốt cháy

Câu trả lời:


334

Biến môi trường là gì?

Biến môi trường chứa các giá trị liên quan đến môi trường hiện tại, như Hệ điều hành hoặc phiên người dùng.

Con đường

Một trong những ứng dụng nổi tiếng nhất được gọi PATHtrên Windows, Linux và Mac OS X. Nó chỉ định các thư mục chứa các chương trình thực thi * nằm trên máy có thể khởi động mà không cần biết và nhập toàn bộ đường dẫn đến tệp trên dòng lệnh . (Hoặc trong Windows, hộp thoại Run trong Menu Bắt đầu hoặc Win+ R).

Trên Linux và Mac OS X, nó thường chứa tất cả binvà các sbinthư mục phù hợp với người dùng hiện tại. Trên Windows, nó chứa ít nhất các thư mục C:\WindowsC:\Windows\system32thư mục - đó là lý do tại sao bạn có thể chạy calc.exe hoặc notepad.exetừ dòng lệnh hoặc hộp thoại Run , nhưng không firefox.exe. (Firefox được đặt trong C:\Program Files\Mozilla Firefox. Để biết thông tin về cách bao gồm Firefox, hãy truy cập vào đây .)

Ví dụ: nhập calc( .exe thể bỏ qua) trong dòng lệnh trên Windows sẽ khởi động Máy tính Windows.

* Bạn có thể thêm hỗ trợ cho các phần mở rộng tập tin ngoài .exeviệc chỉnh sửa %PATHEXT%.

Khác

Các biến khác có thể cho chương trình biết loại thiết bị đầu cuối nào được sử dụng ( TERMtrên Linux / Mac OS X) hoặc trên Windows, nơi đặt thư mục Windows (ví dụ: %WINDIR%is C:\Windows).

Tạo các biến môi trường mới

Trong Windows, Linux và Unix, có thể tạo các biến môi trường mới, với các giá trị sau đó được cung cấp cho tất cả các chương trình khi khởi chạy.

Bạn có thể sử dụng điều này khi viết các tập lệnh hoặc chương trình được cài đặt hoặc triển khai cho nhiều máy và cần tham chiếu các giá trị dành riêng cho các máy này. Mặc dù có thể đạt được hiệu ứng tương tự bằng cách sử dụng cài đặt cấu hình dành riêng cho chương trình, việc thực hiện điều này dễ dàng hơn bằng cách sử dụng biến môi trường nếu nhiều chương trình cần truy cập vào cùng một giá trị.

 

các cửa sổ

GUI

  1. Mở Control Panel » System » Advanced » Environment Variables.

  2. Nhập control sysdm.cpl,,3vào hộp thoại Run ( Win+ R) và nhấp Environment Variables.
    Để chỉnh sửa biến người dùng, bạn cũng có thể nhập

    %windir%\System32\rundll32.exe sysdm.cpl,EditEnvironmentVariables
    

    trong hộp thoại Run.

  3. Nhấp chuột phải vào Máy tính (Của tôi) và nhấp vào Thuộc tính hoặc chỉ cần nhấn Win+ Break.

    • Trong XP bấm vào Advanced » Environment Variables.
    • Trong Vista + bấm vào Advanced system settings » Environment Variables.
  4. Có nhiều cách khác để đến cùng một vị trí, chẳng hạn như bằng cách nhập "biến môi trường" trong hộp Tìm kiếm trên Menu / Màn hình, v.v.

Các biến môi trường trong Windows được phân tách thành các giá trị cụ thể của người dùng và máy / hệ thống. Bạn có thể xem và chỉnh sửa giá trị của họ ở đó. Giá trị hiện tại của họ khi ra mắt được cung cấp cho tất cả các chương trình.

Ngoài ra còn có Trình soạn thảo môi trường nhanh , giúp cài đặt và thay đổi các biến môi trường trong Windows mà không cần đi sâu vào cài đặt hệ thống. Một chương trình mã nguồn mở khác dành cho Windows mà môi trường đường dẫn có thể được chỉnh sửa rất thuận tiện là Path Editor .

Dòng lệnh

định dạng

Biến môi trường trong Windows được biểu thị bằng dấu phần trăm (%) xung quanh tên:

%name%

tiếng vang

Để hiển thị giá trị của biến môi trường cmd.exe, nhập echo %name%.

C:\>echo %USERPROFILE%
C:\Users\Daniel

bộ

Để tạo / đặt một biến, sử dụng set varname=value:

C:\>set FunnyCatPictures=C:\Users\Daniel\Pictures\Funny Cat Pictures

C:\>set FunnyCatPicturesTwo=%USERPROFILE%\Pictures\Funny Cat Pictures 2

Để chắp thêm / thêm một biến, hãy sử dụng set varname=value;%varname%:

C:\>set Penguins=C:\Linux

C:\>set Penguins=C:\Windows;%Penguins%

C:\>echo %Penguins%
C:\Windows;C:\Linux

Các biến môi trường được đặt theo cách này có sẵn cho (phần còn lại) thời lượng của quy trình Dấu nhắc Lệnh trong đó chúng được đặt và có sẵn cho các quy trình được bắt đầu sau khi các biến được đặt.

setx

Để tạo / đặt biến vĩnh viễn , sử dụng setx varname "value":

C:\>setx FunnyCatPictures "C:\Users\Daniel\Pictures\Funny Cat Pictures"

[Restart CMD]

C:\>echo %FunnyCatPictures%
C:\Users\Daniel\Pictures\Funny Cat Pictures

Không giống như set, không có dấu bằng và giá trị phải được đặt trong dấu ngoặc kép nếu nó chứa bất kỳ khoảng trắng nào. Lưu ý rằng các biến có thể mở rộng thành một chuỗi có khoảng trắng (ví dụ: %PATH%trở thành C:\Program Files), vì vậy tốt nhất là bao gồm các trích dẫn xung quanh các giá trị có chứa bất kỳ biến nào.

Bạn phải thêm thủ công setxvào các phiên bản Windows sớm hơn Vista.
Công cụ hỗ trợ Windows XP Gói 2

Danh sách các biến môi trường Windows

Dưới đây là danh sách các biến môi trường mặc định , được tích hợp vào Windows. Một số ví dụ là: %WINDIR%, %SystemRoot%, %USERPROFILE%, và %APPDATA%. Giống như hầu hết các tên trong Windows, đây là những trường hợp không phân biệt chữ hoa chữ thường.

 

Các dẫn xuất Unix (FreeBSD, GNU / Linux, OS X)

Các biến môi trường trong Linux có tiền tố là ký hiệu đô la ($) như $ HOME hoặc $ HOSTNAME. Nhiều biến số nổi tiếng và tiêu chuẩn được đánh vần bằng chữ in hoa để biểu thị điều đó. Hãy nhớ rằng tên biến là phân biệt chữ hoa chữ thường, nghĩa là $ User và $ USER hoàn toàn không liên quan đến quan điểm của shell.

Các dẫn xuất Unix xác định các biến rộng hệ thống trong kịch bản shell nằm chủ yếu trong các /etcthư mục, nhưng giá trị sử dụng cụ thể có thể được trao cho những biến trong kịch bản nằm trong thư mục nhà (ví dụ /etc/profile, $HOME/.bash_profile). Các .profiletập tin trong thư mục nhà là một nơi phổ biến để xác định các biến người dùng.

Đặt biến

Các tệp này là các tập lệnh shell thông thường và có thể chứa nhiều hơn chỉ là các khai báo biến môi trường. Để đặt một biến môi trường, sử dụng export. Để hiển thị các biến môi trường hiện được xác định của bạn trong một thiết bị đầu cuối, hãy chạy env.

Các exportlệnh là một cách tiêu chuẩn để xác định các biến. Cú pháp rất trực quan. Kết quả là giống hệt nhau cho hai dòng này, nhưng sự thay thế đầu tiên được ưu tiên hơn trong trường hợp tính di động đối với vỏ Bourne trước POSIX là cần thiết.

var=value; export var
export var=value

Shell C và hậu duệ của nó sử dụng một cú pháp hoàn toàn khác nhau; ở đó, lệnh là setenv.

Xem dự án tài liệu Linux, Path HOWTO để thảo luận kỹ hơn về chủ đề này.

Có lẽ trái với niềm tin chung, OS X là "Unix" hơn Linux. Ngoài ra với các tệp đã được đề cập, $ PATH có thể được sửa đổi trong các tệp này:

  • /etc/pathschứa tất cả các thư mục mặc định được thêm vào đường dẫn, như /bin/usr/sbin.
  • Bất kỳ tệp nào trong /etc/paths.d- thường được sử dụng bởi các trình cài đặt để làm cho các tệp thực thi mà chúng cung cấp có sẵn từ trình bao mà không cần chạm vào các tệp cấu hình trên toàn hệ thống hoặc dành riêng cho người dùng. Những tệp này chỉ chứa một đường dẫn trên mỗi dòng. ví dụ: / Chương trình / Mozilla / Lịch / bin.

 

Liện kết ngoại:

Biến môi trường trong XP
Windows XP Gói dịch vụ 2 Công cụ hỗ trợ (Bao gồm setx)
Biến môi trường trong Windows Vista và Windows 7
Thêm tệp thực thi vào Hộp thoại Run
Mac OSX Mẹo - Cài đặt Biến môi trường
TLDP: Đường dẫn cách


10
Trên Windows Vista trở đi, bạn có thể sử dụng SETXđể thực hiện các thay đổi vĩnh viễn. Nó có một cú pháp hơi khác nhau. SETXphải được thêm từ các Windows Server 2003 Resource Kitphiên bản trước của NT.
paradroid

1
@paradroid Nice, không biết điều đó (không phải người dùng Windows). Chủ đề này là wiki cộng đồng, bạn có thể tiếp tục và chỉ cần chỉnh sửa trong thông tin đó.
Daniel Beck

2
@JdeBP Tiêu đề phần có ý nghĩa tham khảo cách đặt các giá trị này trên giao diện người dùng , được gọi là shell trên Windows, trái ngược với phần sau, giao diện dòng lệnh . Tôi đã chỉnh sửa điều này trước khi tôi thấy bình luận của bạn 10 giờ trước. Không ai từng đề cập rằng điều này chỉ áp dụng cho Explorer.
Daniel Beck

1
@JdeBP Câu trả lời bạn liên kết đến không thực sự áp dụng trong trường hợp này, vì bạn đã nói về việc đặt các giá trị trong sổ đăng ký. Cài đặt qua hộp thoại sẽ phát ra mà WM_SETTINGCHANGEtôi tưởng tượng và do đó thông báo cho các bên quan tâm về các giá trị mới. Đó là lý do tại sao tôi hỏi làm thế nào nó được áp dụng ở đây. Làm một cái gì đó in đậm không thay đổi ý nghĩa của nó và cũng không làm cho nó dễ hiểu hơn, giống như lặp lại cùng một câu, chỉ to hơn. Ngoài ra, tôi đã chỉnh sửa bài đăng này một vài giờ trước để đề cập cụ thể rằng các giá trị mà các quy trình nhận được được đặt khi chúng được khởi chạy.
Daniel Beck

3
@JdeBP Bạn cũng có thể nhận thấy rằng câu hỏi khá cơ bản về bản chất. Giải thích cặn kẽ những rắc rối về cách thay đổi các biến môi trường được phân phối (nghiêm túc , WM_SETTINGCHANGE? Windows API? Đây không phải là khán giả của câu hỏi này!) Có thể không phải là một ý tưởng hay, vì nó có thể gây nhầm lẫn cho người đọc thay vì giải thích những biến này là gì .
Daniel Beck

64

Bài đăng này là từ quan điểm kỹ thuật hơn so với Daniel, nhưng không giải thích nhiều về các khái niệm.


Các bài viết trên Wikipedia cũng là một liệu tham khảo tuyệt vời.

Linux và hầu hết các BSD

Trong hầu hết các shell dòng lệnh, các biến môi trường tạm thời được đặt bằng các lệnh export(sh, bash, zsh) hoặc setenv(csh, tcsh).

  • Ví dụ cho thêm vào trước $HOME/binđể $PATHtrong bash hoặc zsh:

    export PATH="$HOME/bin:$PATH"
    

    (Trong trường hợp cụ thể này, exportkhông cần thiết vì PATHđã là một phần của môi trường.)

  • csh, tcsh:

    setenv PATH "$HOME/bin:$PATH"
    

Các biến môi trường liên tục có thể được đặt trong một số giai đoạn riêng biệt:

  • Đăng nhập:

    • Thiết lập phiên đăng nhập: Linux pam_env, thường đọc từ/etc/environment

    • Đăng nhập thiết bị đầu cuối: tập tin "hồ sơ" của shell.

      • bashsử dụng /etc/profilevà là người đầu tiên của: ~/.bash_profile, ~/.bash_login, ~/.profile. bash(1)Phần trang hướng dẫn Gọi .

        Thông thường, tệp hồ sơ của người dùng cũng bao gồm một cuộc gọi rõ ràng ~/.bashrc.

      • zsh: zsh(1)Phần trang hướng dẫn tập tin Khởi động / tắt máy .

      • csh và các shell khác: Xem các trang hướng dẫn phù hợp.

    • Đăng nhập đồ họa: Không chắc chắn; có thể thay đổi tùy thuộc vào người quản lý đăng nhập. GDM xuất hiện để đọc ~/.profiletrong hệ thống của tôi.

  • Mở một cửa sổ đầu cuối:

    • bashsử dụng /etc/bash.bashrc~/.bashrc.

Dòng Windows NT

  • Trong Command Prompt ( cmd.exe), sử dụng set name=valueđể thay đổi các biến môi trường cho cửa sổ đó.

    Để thêm c:\binvào %PATH%, sử dụng:

    set path=%path%;c:\bin
    

    Điều này chỉ ảnh hưởng đến cmd.exequá trình đó và bất kỳ quy trình mới nào được khởi chạy từ nó.

  • Để thực hiện các thay đổi liên tục, hãy sử dụng Bảng điều khiển → Hệ thống → Nâng cao → Biến môi trường . ( tài liệu )

    Lưu ý: Mặc dù cài đặt người dùng thường ghi đè lên các hệ thống, PATHbiến được xử lý đặc biệt: cả cài đặt hệ thống và người dùng được hợp nhất vào giá trị cuối cùng.

    Các thay đổi được lưu trữ vào Registry (xem bên dưới) và áp dụng ngay lập tức cho tất cả các quy trình mới được tạo bởi Explorer (vỏ đồ họa), ví dụ, thông qua Menu bắt đầu.

  • Các biến môi trường toàn hệ thống được giữ trong Sổ đăng ký HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environmentvà được tải khi khởi động hệ thống.

    Môi trường người dùng được giữ HKCU\Environmentvà tải trong quá trình đăng nhập của người dùng.

  • Theo mặc định, hệ thống cũng tìm kiếm setcác lệnh trong AUTOEXEC.NTtệp.

MS-DOS, Windows 16 bit, Windows 9x series

  • Trong MS-DOS Prompt ( command.com), sử dụng set name=value, như trong WinNT.

    Tương tự, chạy settương tác chỉ ảnh hưởng đến một command.comthể hiện đó, cùng với bất kỳ quy trình mới nào được khởi chạy từ nó.

  • Để thực hiện các thay đổi liên tục, hãy thêm hoặc chỉnh sửa setcác dòng phù hợp C:\AUTOEXEC.BAT, sau đó khởi động lại.

    • Giải pháp thay thế để tránh khởi động lại, đối với Windows 9x: mở cửa sổ Nhắc MS-DOS, đặt các biến phù hợp, đóng quy trình Explorer hiện có ( Bắt đầu → Tắt → trong khi giữ Ctrl + Shift, bấm Hủy ), chạy explorer.exetừ cửa sổ Nhắc MS-DOS .

VMS

(Không thể cưỡng lại.)

DCL không có khái niệm về "đường dẫn", nhưng có thể đưa vào các định nghĩa biểu tượng và lệnh khác nhau SYS$LOGIN:LOGIN.COM.


2
Phần VMS là sai. DCL có DCL$PATH" lệnh nước ngoài tự động ".
JdeBP

9

Đối với các biến môi trường toàn cầu bashshell PATH(không phải thiết bị đầu cuối), tôi tuân theo quy ước được sử dụng trong cài đặt Ubuntu VM của mình - các shell khác sẽ thay đổi:

Nên biết trước: Toàn bộ vỏ khởi động trình tự, mà .bashrc, .profilevv file có nguồn gốc biến trong thứ tự nào ?, khi nào tôi phải làm lại đăng nhập để có được tầm nhìn đến mới xác định, bí danh, vv ?, sự khác biệt giữa một tên đăng nhập là gì , vỏ tương tác và không tương tác - Tôi có sử dụng cronkhông? và tại sao khi tôi làm một biến . ~/.bashrcngu ngốc của tôi PATHngày càng dài hơn? là những câu hỏi quan trọng xuất hiện trong đầu khi tôi nghĩ về PATHbiến của mình .

Trên thực tế, tôi hoàn toàn viết lại toàn bộ tập tin khởi động bash của mình lấy ý tưởng từ các tập tin bộ xương Ubuntu và cygwin, và đây là một số trong các trang web của tôi:

  1. Xuất PATHvà các biến môi trường toàn cầu khác (tức là LD_LIBRARY_PATH) trong .profile;
  2. Sử dụng logic trong ~/.profilenguồn $HOME/.bashrcnếu nó tồn tại;
  3. Hàng rào thực hiện ~/.bashrcvới một bài kiểm tra để thực hiện tương tác, thoát ra khác;
  4. Đặt tất cả các bí danh, shoptthiết lập nhanh chóng, kiểm soát lịch sử, thiết lập đầu cuối, định nghĩa chức năng, v.v. (thiết lập liên quan tương tác) trong phần ~/.bashrcđó được bảo vệ để chỉ chạy trong chế độ tương tác;
  5. Loại bỏ các tệp khởi động bash khác, bởi vì sự tồn tại của chúng xác định liệu đường dẫn điều khiển đi qua .profile.bashrchoạt động như mong đợi. Đó là, trừ khi có các yêu cầu cụ thể để làm khác, xóa ~/.bash_profile& ~/.bash_login;
  6. Khi tôi ở dấu nhắc bash và tôi cần cập nhật một số thiết lập mặc định, tôi chỉnh sửa ~/.bashrctệp của mình , sau đó chỉ cần nguồn nó với một . ~/.bashrcđể có được những thay đổi trong vỏ hiện tại của tôi.
  7. Khi tôi thực hiện thay đổi đối với biến môi trường như thế nào PATH, tôi cần sửa đổi và tìm nguồn ~/.profile;
  8. Tôi đặt các cuộc gọi của mình đến fink, port và pha các thiết lập cụ thể vào .profile.

Đó là 2 xu của tôi về chủ đề này.


7

Q: Biến môi trường là gì?

A: Biến môi trường tương tự như các biến trong bất kỳ ngôn ngữ lập trình nào. Trong trường hợp hệ thống Windows hoặc Unix, họ đang lưu trữ các giá trị khác nhau để cho phép các chương trình và tác vụ nhận thông tin hệ điều hành cần thiết hoặc thông tin 'Môi trường'. Ví dụ:

USERPROFILE: thư mục người dùng trong các tệp HĐH.

MAIL: nơi có thể tìm thấy thư của người dùng trong các tệp HĐH.

Q: Biến PATH cụ thể là gì?

A: Biến PATH thiết lập các đường dẫn thư mục để xem xét khi các lệnh được thực thi, cả cho các lệnh RUN và cho các cuộc gọi nội bộ từ các chương trình. Điều này ngăn chương trình cần biết vị trí cài đặt của nó để gọi các quy trình thực thi khác.

Nó nhìn vào biến PATH của Hệ thống Môi trường Windows và kiểm tra từng vị trí để thực thi nhất định. Do đó, việc thêm một vị trí vào biến PATH cho phép thực thi được gọi trực tiếp.

Theo bài viết Wikipedia này :

Khi một lệnh được nhập vào shell lệnh hoặc một lệnh gọi hệ thống được thực hiện bởi một chương trình để thực thi chương trình, trước tiên hệ thống sẽ tìm kiếm thư mục làm việc hiện tại và sau đó tìm kiếm đường dẫn, kiểm tra từng thư mục từ trái sang phải


Q: LÀM THẾ NÀO để thêm một vị trí vào biến PATH?

Trả lời: Bạn cần chỉnh sửa chuỗi biến của biến Môi trường Biến PATH để bao gồm vị trí thực thi của bạn.

Một cách để làm điều này được mô tả ở đây :

  1. Mở Menu Bắt đầu và nhấp chuột phải vào Máy tính. Chọn Thuộc tính.
  2. Chọn Cài đặt hệ thống nâng cao.
  3. Trong tab Nâng cao, chọn Biến môi trường.
  4. Chọn EDIT hoặc MỚI. (đối với PATH bạn rất có thể muốn EDIT).
  5. Thêm đường dẫn vị trí của bạn. ví dụ:C:\wamp\bin\php\php5.5.12;

Tôi hy vọng điều này làm rõ một số nhầm lẫn.

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.