題 什麼是PATH和其他環境變量,以及如何設置或使用它們?


有關的問題

  • 設置環境變量
  • PATH

在這裡很常見,在大多數情況下,答案彼此非常相似。在未來,為此獲得良好的Q / A將是一件好事。

所以問題是: 什麼是環境變量,如可執行文件 PATH,如何在主要操作系統上更改和使用它們?

一個好的答案將包括對環境變量的簡單解釋,尤其是 PATH 對操作系統意味著什麼,以及關於如何相應地設置和讀取它們的簡單指南。


324
2018-05-16 18:25


起源


厭倦了每次我需要手動完成時,我寫了一些註冊表項,使用名為pathed.exe的免費應用程序將AddToPath和RemoveFromPath的上下文菜單項添加到文件夾。以下是完整指南的鏈接: addictivetips.com/windows-tips/... 我現在可以非常輕鬆地將文件夾添加到PATH變量或從中刪除它們,而無需編輯任何文件或擔心弄亂變量的格式。希望能幫助到你。 =) - Haroon Q. Raja
在Windows上,有一個用於打開System的屬性的快捷方式。控制面板 - >系統它是鍵盤上的WIN鍵+暫停/中斷(WIN +中斷)。這非常有用,並且加快了在Win8上設置新環境變量的過程,因為你必須在現代ui中點擊幾個窗口(是的。如果它是現代的那麼我會在我的手掌上種植仙人掌)這很煩人。當然你可以創建powershell腳本或使用setx命令而不用擔心它:D - termil0r
在Windows 8中,更改系統和用戶環境變量的最快導航是使用搜索。 <kbd> Win </ kbd> + <kbd> W </ kbd>顯示所有設置的搜索。搜索 env 並列出了所需的選項。 - FRIdSUN
打開時,我覺得它更快更清晰 CMD和打字 set, 要么 PowerShell和打字 Get-Childitem env:。 - paradroid
如果您正在編輯路徑變量(例如在設置新系統時),則可能有助於在桌面上具有“系統屬性”對話框的快捷方式。為此,右鍵單擊桌面,選擇“新建快捷方式”,然後輸入systempropertiesadvanced.exe。然後,您可以單擊鏈接以轉到“系統屬性”對話框,然後單擊“環境變量”以轉到包含路徑設置的對話框。 - Brian Burns


答案:


什麼是環境變量?

環境變量包含與當前環境相關的值,如操作系統或用戶會話。

路徑

其中一個最著名的叫做 PATH 在Windows,Linux和Mac OS X上。它指定可在不知道的情況下啟動的機器上可執行程序*所在的目錄,並在命令行上鍵入文件的完整路徑。 (或者在Windows中,  “開始”菜單中的對話框或 Win+[R)。

在Linux和Mac OS X上,它通常包含所有內容 bin 和 sbin 與當前用戶相關的目錄。在Windows上,它至少包含 C:\Windows 和 C:\Windows\system32 目錄 - 這就是為什麼你可以   calc.exe 要么 notepad.exe 從命令行或  對話,但不是 firefox.exe。 (Firefox位於 C:\Program Files\Mozilla Firefox。有關如何包含Firefox的信息,請轉到 這裡。)

例如,輸入 calc (該 .exe  能夠 在Windows上的命令行中將被省略)將啟動Windows計算器。

*您可以添加對文件擴展名以外的支持 .exe 通過編輯 %PATHEXT%

其他

其他變量可能會告訴程序使用哪種終端(TERM 在Linux / Mac OS X上,或者在Windows上,Windows文件夾所在的位置(例如, %WINDIR% 是 C:\Windows)。

創建新的環境變量

在Windows,Linux和Unix中,可以創建新的環境變量,然後在啟動時將其值提供給所有程序。

在編寫安裝或部署到多台計算機的腳本或程序並且需要引用特定於這些計算機的值時,可以使用此方法。雖然使用特定於程序的配置設置可以實現類似的效果,但如果多個程序需要訪問相同的值,則使用環境變量更容易實現。

視窗

GUI

  1. 打開 Control Panel » System » Advanced » Environment Variables

  2. 類型 control sysdm.cpl,,3 在“運行”對話框中(Win+[R)並單擊 Environment Variables
    要編輯用戶變量,您還可以鍵入

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

    在“運行”對話框中。

  3. 右鍵單擊(我的)計算機,然後單擊屬性,或者只需按 Win+打破

    • 在XP中點擊 Advanced » Environment Variables
    • 在Vista中點擊 Advanced system settings » Environment Variables
  4. 有許多其他方法可以到達同一個地方,例如在“開始菜單/屏幕”搜索框中鍵入“環境變量”等。

Windows中的環境變量分為用戶和計算機/系統特定值。您可以在那裡查看和編輯它們的值。發佈時的當前值可供所有程序使用。

還有 快速環境編輯,有助於在Windows中設置和更改環境變量,而無需深入了解系統設置。 Windows的另一個開源程序,可以非常方便地編輯路徑環境 路徑編輯器

命令行

格式

Windows中的環境變量用名稱周圍的百分號(%)表示:

%name%

迴聲

顯示環境變量的值 cmd.exe,鍵入 echo %name%

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

創建/套 變量,使用 set varname=value

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

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

附加/加 變量,使用 set varname=value;%varname%

C:\>set Penguins=C:\Linux

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

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

以這種方式設置的環境變量可用於(其餘部分) 設置它們的命令提示符進程的持續時間, 並且可用於設置變量後啟動的進程。

SETX

創建/套 一個變量 永久性, 使用 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

不像 set,沒有等號,如果它包含任何空格,則該值應用引號括起來。注意,變量可以擴展為帶空格的字符串(例如, %PATH% 變 C:\Program Files),因此最好在包含任何變量的值周圍包含引號。

您必須手動添加 setx 到Vista之前的Windows版本。
Windows XP Service Pack 2支持工具

Windows環境變量列表

這裡 是一個列表 默認環境變量,內置於Windows。一些例子是: %WINDIR%%SystemRoot%%USERPROFILE%,和 %APPDATA%。 與Windows中的大多數名稱一樣,這些名稱不區分大小寫。

Unix衍生產品(FreeBSD,GNU / Linux,OS X)

Linux中的環境變量帶有美元符號($)前綴,例如$ HOME或$ HOSTNAME。許多眾所周知的標準變量都用大寫字母拼寫,以表示這一點。請記住,變量名稱區分大小寫,這意味著$ user和$ USER與shell的觀點完全無關。

Unix衍生物在shell腳本中定義系統範圍的變量,主要位於 /etc 文件夾,但可以在位於主文件夾中的腳本中為這些變量提供特定於用戶的值(例如, /etc/profile$HOME/.bash_profile)。該 .profile home文件夾中的文件是定義用戶變量的常見位置。

設置變量

這些文件是常規shell腳本,可以包含不僅僅是環境變量聲明。要設置環境變量,請使用 export。要在終端中顯示當前定義的環境變量,請運行 env

export command是定義變量的標準方法。語法非常直觀。這兩行的結果是相同的,但是第一種替代方案是優選的,以防止需要前POSIX Bourne shell。

var=value; export var
export var=value

C shell及其後代使用完全不同的語法;在那裡,命令是 setenv

查看Linux文檔項目, 路徑HOWTO 有關此主題的更全面的討論。

也許與普遍看法相反,OS X比Linux更“Unix”。除了已經提到的文件之外,還可以在這些文件中修改$ PATH:

  • /etc/paths 包含添加到路徑的所有默認目錄,例如 /bin 和 /usr/sbin
  • 任何文件 /etc/paths.d  - 安裝程序通常使用它們從shell提供它們提供的可執行文件,而無需觸及系統範圍或用戶特定的配置文件。這些文件每行只包含一個路徑。例如,/ Programs / Mozilla / Calendar / bin。

外部鏈接:

XP中的環境變量
Windows XP Service Pack 2支持工具 (包括 setx
Windows Vista和Windows 7中的環境變量
將可執行文件添加到“運行”對話框
Mac OSX技巧 - 設置環境變量
TLDP:Path Howto


315
2018-05-16 18:44



在Windows Vista之後,您可以使用 SETX 做出永久性的改變。它的語法略有不同。 SETX 必須從中添加 Windows Server 2003 Resource Kit 對於早期版本的 NT。 - paradroid
@paradroid很好,不知道(不是Windows用戶)。這個主題是社區維基,您可以繼續並只編輯該信息。 - Daniel Beck♦
@JdeBP章節標題是為了參考 如何在用戶界面上設置這些值, 這就是所謂的 貝殼 在Windows上,與以下部分相反, 命令行界面。我在10小時前看到你的評論之前編輯了這個。沒人提到這只適用於資源管理器。 - Daniel Beck♦
@JdeBP您鏈接的答案在這種情況下並不真正適用,因為您談到了在註冊表中設置值。通過對話框設置將廣播該內容 WM_SETTINGCHANGE 我想,因此通知感興趣的各方新的價值觀。這就是為什麼我問它在這裡應用的原因。製作粗體字並不會改變它的含義,也不會使它更容易理解,就像重複相同的句子一樣,只是更響亮。此外,我在幾個小時前編輯了這篇文章,特別提到過程接收的值在啟動時設置。 - Daniel Beck♦
@JdeBP你可能也會注意到這個問題本質上是基本的。仔細解釋如何分配環境變量變化的複雜性(嚴重的是, WM_SETTINGCHANGE? Windows API?這不是這個問題的受眾!)可能不是一個好主意,因為它可能會使讀者感到困惑,而不是解釋這些變量的含義。 - Daniel Beck♦


這篇文章來自比丹尼爾更為技術性的觀點,但沒有解釋這些概念。


維基百科文章 也是一個很好的參考。

Linux和大多數BSD

在大多數命令行shell中,使用設置臨時環境變量 export (sh,bash,zsh)或 setenv (csh,tcsh)命令。

  • 前置的例子 $HOME/bin 至 $PATH 在bash或zsh中:

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

    (在這種特殊情況下, export 是不必要的 PATH 已經是環境的一部分了。)

  • csh,tcsh:

    setenv PATH "$HOME/bin:$PATH"
    

持久環境變量可以在幾個不同的階段設置:

  • 登錄:

    • 登錄會話設置:Linux pam_env,通常從中讀取 /etc/environment

    • 終端登錄:shell的“配置文件”文件。

      • bash 使用 /etc/profile 和第一個: ~/.bash_profile~/.bash_login~/.profile。手冊頁 bash(1) 部分 調用

        通常,用戶的配置文件包含顯式調用 ~/.bashrc 太。

      • zsh:手冊頁 zsh(1) 部分 啟動/關閉文件

      • csh 和其他shell:請參閱相應的手冊頁。

    • 圖形登錄:不確定;可能因登錄管理員而異。 GDM似乎在閱讀 ~/.profile 在我的系統中。

  • 打開終端窗口:

    • bash 使用 /etc/bash.bashrc 和 ~/.bashrc

Windows NT系列

  • 在命令提示符(cmd.exe), 使用 set name=value 更改該窗口的環境變量。

    追加 c:\bin 至 %PATH%, 使用:

    set path=%path%;c:\bin
    

    這只會影響到這一點 cmd.exe 過程,等等  從它發起的進程。

  • 要進行持久更改,請使用 控制面板→系統→高級→環境變量。 (文檔

    注意: 用戶設置通常會覆蓋系統設置, PATH 變量是專門處理的:系統和用戶設置都合併為最終值。

    更改存儲到註冊表(見下文),並立即應用於所有人  資源管理器(圖形外殼)創建的進程,例如,通過“開始”菜單。

  • 系統範圍的環境變量保存在註冊表中, HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment,並在系統啟動時加載。

    保留用戶環境 HKCU\Environment 並在用戶登錄期間加載。

  • 默認情況下,系統也會查找 set 命令 AUTOEXEC.NT 文件。

MS-DOS,16位Windows,Windows 9x系列

  • 在MS-DOS提示符(command.com), 使用 set name=value,如在WinNT中。

    同樣,跑步 set 交互式地只影響那個 command.com 實例,以及從它啟動的任何新進程。

  • 要進行持久更改,請添加或編輯適當的更改 set 線路 C:\AUTOEXEC.BAT,然後重啟。

    • 為避免重新啟動的解決方法,對於Windows 9x:打開MS-DOS提示符窗口,設置適當的變量,關閉現有的Explorer進程(開始→關機 →按住Ctrl + Shift,單擊 取消), 跑 explorer.exe 從MS-DOS提示符窗口。

VMS

(無法抗拒。)

DCL沒有“路徑”的概念,但可以放入各種符號和命令定義 SYS$LOGIN:LOGIN.COM


62
2018-05-16 19:03



VMS部分是錯誤的。 DCL有 DCL$PATH 為“自動外部命令“。 - JdeBP
@grawity,你是什麼意思“vms無法抗拒......”? - Pacerier


為了 bash 貝殼 PATH 全局(非終端)環境變量,我遵循我的Ubuntu VM安裝中使用的約定 - 其他shell將有所不同:

警告:整個shell的啟動順序,即 .bashrc.profile等文件來自哪個順序?,什麼時候必須重新登錄以獲得新定義的變量,別名等的可見性?登錄,交互和非交互式shell之間有什麼區別 - 我確實使用 cron?,以及為什麼當我這樣做 . ~/.bashrc 是我的傻瓜 PATH 變量越來越長?是我想到的時候想到的關鍵問題 PATH 變量。

事實上,我只是完全重寫了我的整個bash啟動文件集,從Ubuntu和cygwin骨架文件中獲取想法,這裡有一些我的網站:

  1. 出口 PATH 和其他全球環境變量(即 LD_LIBRARY_PATH)中的變量 .profile;
  2. 使用邏輯 ~/.profile 源 $HOME/.bashrc 如果它存在;
  3. 圍欄執行 ~/.bashrc 測試交互式執行,否則退出;
  4. 把所有的別名, shopt的,部分提示設置,歷史記錄控制,終端設置,功能定義等(交互式相關設置) ~/.bashrc 受保護只能以交互模式運行;
  5. 擺脫其他bash啟動文件,因為它們的存在決定了控制路徑是否通過 .profile 和 .bashrc 按預期工作。也就是說,除非有特殊要求,否則請刪除 ~/.bash_profile & ~/.bash_login;
  6. 當我在bash提示符下,並且我需要更新一些默認設置時,我會編輯我的 ~/.bashrc 文件,然後簡單地用它來源 . ~/.bashrc 在我當前的shell中獲取這些更改。
  7. 當我對環境變量進行更改時 PATH,我需要修改和採購我的 ~/.profile;
  8. 我打電話給fink,port和brew特定的設置 .profile

這是我在這個話題上的2美分。


9
2018-01-15 17:49





問:  什麼是環境變量?

A: 環境變量類似於任何編程語言中的變量。在Windows或Unix系統的情況下,它們存儲各種值以允許程序和任務獲得必要的OS信息或“環境”信息。例如:

USERPROFILE:OS文件中的users目錄。

郵件:可以在操作系統文件中找到用戶郵件的位置。

問:PATH變量具體是什麼?

A: PATH變量設置在執行命令時查看的目錄路徑,包括RUN命令和程序內部調用。這可以防止程序需要知道其安裝位置以調用其他可執行進程。

它查看Windows環境系統PATH變量並測試給定可執行文件的每個位置。因此,向PATH變量添加位置允許直接調用可執行文件。

根據這個 維基百科文章

在命令shell中輸入命令或由程序執行系統調用以執行程序時,系統首先搜索當前工作目錄,然後搜索路徑,從左到右檢查每個目錄


問:如何向PATH變量添加位置?

A: 您需要編輯Environment Variables PATH變量的變量字符串以包含可執行文件的位置。

描述了一種方法 這裡

  1. 打開“開始”菜單,右鍵單擊“計算機”。選擇屬性。
  2. 選擇高級系統設置。
  3. 在“高級”選項卡中,選擇“環境變量”。
  4. 選擇編輯或新建。 (對於PATH,你最有可能想編輯)。
  5. 添加您的位置路徑。例如。: C:\wamp\bin\php\php5.5.12;

我希望這澄清了一些混亂。


6
2017-07-25 09:57