什么是PATH和其他环境变量,如何设置或使用它们?


341

有关的问题

  • 设置环境变量
  • PATH

在这里非常普遍,并且在大多数情况下,答案彼此非常相似。将来对此进行良好的Q / A会很高兴。

所以问题是:什么是环境变量,如可执行文件PATH,如何在主要操作系统上更改和使用它们?

一个好的答案将包括对什么是环境变量,特别PATH是对操作系统意味着什么的简单解释,以及有关如何相应地设置和读取它们的简单准则。


2
厌倦了每次都需要手动执行的烦恼,我编写了一些注册表项,以使用名为pathed.exe的免费应用程序将AddToPath和RemoveFromPath的上下文菜单项添加到文件夹。以下是完整指南的链接:上瘾的提示.com / windows-tips /…现在,我可以非常轻松地将文件夹添加到PATH变量或从中删除它们,而无需编辑任何文件或担心弄乱变量的格式。希望能帮助到你。=)
Haroon Q. Raja '04

1
在Windows上,有一个用于打开System(系统)属性的快捷方式。控制面板->系统这是键盘上的WIN键+暂停/中断(WIN + Break)。这非常有用,可以加快在Win8上设置新环境变量的过程,因为您必须在现代ui中单击几个窗口(是的。如果它是现代的,那么我会在手掌上种植一个仙人掌),这很烦人。当然,您可以创建powershell脚本或使用setx命令,而不必担心它了:D
termil0r 2012年

在Windows 8中,对变化中的系统和用户环境变量的最快导航是使用搜索。<kbd> Win </ kbd> + <kbd> W </ kbd>会显示所有设置的搜索。搜索env并列出所需的选项。
FRIdSUN 2014年

我认为通过打开CMD和键入setPowerShell键入它会更快,更清晰Get-Childitem env:
paradroid

如果您要大量编辑路径变量(例如,在设置新系统时),那么在桌面上具有指向“系统属性”对话框的快捷方式可能会有所帮助。为此,右键单击桌面,选择“新建快捷方式”,然后输入systempropertiesadvanced.exe。然后,您可以单击链接进入“系统属性”对话框,然后单击“环境变量”进入包含路径设置的对话框。
Brian Burns 2015年

Answers:


334

什么是环境变量?

环境变量保存与当前环境相关的值,例如操作系统或用户会话。

路径

PATH在Windows,Linux和Mac OS X上,最著名的方法之一就是它。它指定计算机上的可执行程序*所在的目录,这些目录可以在不知道并在命令行上键入文件的完整路径的情况下启动。 。(或者在Windows中,在“开始”菜单或+ 中,单击“ 运行”对话框)。WinR

在Linux和Mac OS X上,它通常包含binsbin当前用户相关的所有目录。在Windows上,它至少包含C:\WindowsC:\Windows\system32目录-这就是为什么你可以运行 calc.exenotepad.exe通过命令行或运行对话框,但不是firefox.exe。(Firefox位于中C:\Program Files\Mozilla Firefox。有关如何包含Firefox的信息,请转到此处。)

例如,在Windows的命令行中键入calc.exe 可以省略),将启动Windows计算器。

*您可以.exe通过编辑添加对文件扩展名的支持%PATHEXT%

其他

其他变量可能会告诉程序使用哪种终端(TERM在Linux / Mac OS X上),或者在Windows上,Windows文件夹位于何处(例如%WINDIR%is C:\Windows)。

创建新的环境变量

在Windows,Linux和Unix中,可以创建新的环境变量,然后在启动时将其值提供给所有程序。

在编写已安装或部署到多台计算机并需要引用特定于这些计算机的值的脚本或程序时,可以使用此功能。尽管可以使用特定于程序的配置设置来达到类似的效果,但是如果多个程序需要访问相同的值,则可以使用环境变量来完成此操作。

 

视窗

图形用户界面

  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+ Break

    • 在XP中,单击Advanced » Environment Variables
    • 在Vista +中,单击Advanced system settings » Environment Variables
  4. 还有许多到达同一位置的方法,例如通过在“开始”菜单/屏幕搜索框中键入“环境变量”,等等。

Windows中的环境变量分为用户和机器/系统特定的值。您可以在那里查看和编辑其值。它们在启动时的当前值可用于所有程序。

还有一个Rapid Environment Editor,它可以帮助您在Windows中设置和更改环境变量,而无需深入了解系统设置。可以非常方便地编辑路径环境的另一个Windows开源程序是Path Editor

命令行

格式

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 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),因此最好在包含任何变量的值周围加上引号。

您必须手动添加setxWindows 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完全无关。

Unix派生词主要在位于该/etc文件夹中的shell脚本中定义系统范围的变量,但是可以将用户特定的值赋予位于主文件夹中的脚本中的那些变量(例如/etc/profile$HOME/.bash_profile)。将.profile在主文件夹文件是定义用户变量一个共同的地方。

设定变量

这些文件是常规的shell脚本,不仅可以包含环境变量声明,还可以包含更多文件。要设置环境变量,请使用export。要在终端中显示当前定义的环境变量,请运行env

export命令是定义变量的标准方法。语法非常直观。对于这两条线,结果是相同的,但是在需要移植到POSIX Bourne之前的外壳的情况下,首选第一种方法。

var=value; export var
export var=value

C外壳及其子代使用完全不同的语法。在那里,命令是setenv

请参阅Linux文档项目Path HOWTO,以获取有关此主题的更详尽讨论。

也许与通常的看法相反,OS X比Linux更“ Unix”。除了已经提到的文件之外,还可以在以下文件中修改$ PATH:

  • /etc/paths包含所有添加到路径的默认目录,例如/bin/usr/sbin
  • 中的任何文件/etc/paths.d-安装程序通常使用它们来使外壳程序提供它们提供的可执行文件,而无需接触系统范围或特定于用户的配置文件。这些文件每行仅包含一个路径。例如,/ Programs / Mozilla / Calendar / bin。

 

外部链接:

XP中的环境变量
Windows XP Service Pack 2支持工具(包括setx
Windows Vista和Windows 7中的环境变量在
“运行”对话框中添加可执行文件
Mac OSX技巧-设置环境变量
TLDP:路径操作方法


10
从Windows Vista开始,您可以使用SETX进行永久更改。它的语法略有不同。 SETX必须从的Windows Server 2003 Resource Kit早期版本中添加NT
仿形2011年

1
@paradroid尼斯,不知道(不是Windows用户)。该主题是社区Wiki,您可以继续进行操作,只需编辑该信息即可。
丹尼尔·贝克

2
@JdeBP本节标题旨在参考如何在用户界面(在Windows上称为shell)设置这些值,这与下面的命令行界面相反。我在10小时前甚至还没有看到您的评论之前就对其进行了编辑。没有人提到这仅适用于资源管理器。
丹尼尔·贝克

1
@JdeBP您链接到的答案在这种情况下实际上并不适用,因为您曾讨论过在注册表中设置值。通过对话框进行设置将广播WM_SETTINGCHANGE我想像的内容,因此将新值通知有关各方。这就是为什么我问它在这里如何应用。制作粗体字不会改变其含义,也不会使其更容易理解,就像重复同一句话一样,只是声音更大。另外,我在几个小时前编辑了这篇文章,以特别提及这些进程在启动时会设置的值。
丹尼尔·贝克

3
@JdeBP您可能还会注意到,这个问题本质上是相当基本的。仔细地解释如何更改环境变量的分布的复杂性(严重的WM_SETTINGCHANGE是Windows API?这不是这个问题的读者!)可能不是一个好主意,因为这可能会使读者感到困惑,而不是解释这些变量的含义。 。
丹尼尔·贝克

64

这篇文章从技术上来说比Daniel的观点要多,但是并没有解释太多概念。


维基百科的文章也是一个很好的referrence。

Linux和大多数BSD

在大多数命令行外壳程序中,使用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

    • 终端登录:Sh​​ell的“配置文件”文件。

      • 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流程以及由此启动的任何流程。

  • 要进行永久更改,请使用控制面板→系统→高级→环境变量。(docs

    注意:虽然用户设置通常会覆盖系统设置,但会PATH特别处理变量:系统设置和用户设置都合并为最终值。

    所做的更改将存储到注册表(请参见下文),并立即应用于Explorer(图形外壳)创建的所有进程,例如通过“开始”菜单。

  • 系统范围的环境变量保存在注册表中HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment,并在系统启动时加载。

    HKCU\Environment用户登录期间将保留并加载用户环境。

  • 默认情况下,系统还会setAUTOEXEC.NT文件中查找命令。

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

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

    同样,以set交互方式运行只会影响一个command.com实例以及从该实例启动的任何新进程。

  • 要进行永久更改,请在中添加或编辑适当的setC:\AUTOEXEC.BAT,然后重新启动。

    • 避免重新启动的解决方法,对于Windows 9x:打开MS-DOS提示符窗口,设置适当的变量,关闭现有的资源管理器进程(开始→关机 →按住Ctrl + Shift的同时,单击取消),explorer.exe从MS-DOS提示符窗口运行。

VMS

(无法抗拒。)

DCL没有“路径”的概念,但是可以放入各种符号和命令定义SYS$LOGIN:LOGIN.COM


2
VMS部分错误。DCL具有DCL$PATH自动外部命令 ”。
JdeBP

9

对于bash外壳程序PATH全局(非终端)环境变量,我遵循在Ubuntu VM安装中使用的约定-其他外壳程序会有所不同:

警告:整个外壳启动过程,哪个.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. 我打电话到中进行芬克,移植和酿造特定设置.profile

那是我在这个话题上的2美分。


7

问: 什么是环境变量?

答:环境变量类似于任何编程语言中的变量。对于Windows或Unix系统,它们存储各种值,以允许程序和任务获取必要的OS信息或“环境”信息。例如:

USERPROFILE:OS文件中的用户目录。

MAIL:在OS文件中可以找到用户邮件的位置。

问:什么是PATH变量?

答: PATH变量设置目录路径以在执行命令时查找,包括RUN命令和程序内部调用。这样可以防止程序需要知道其安装位置来调用其他可执行进程。

它查找Windows环境系统PATH变量,并测试给定可执行文件的每个位置。因此,将位置添加到PATH变量允许直接调用可执行文件。

根据这篇维基百科文章

当在命令外壳中输入命令或程序进行系统调用以执行程序时,系统首先搜索当前工作目录,然后搜索路径,从左到右检查每个目录


问:如何在PATH变量中添加位置?

答:您需要编辑环境变量PATH变量的变量字符串以包含可执行文件的位置。

这里描述一种方法:

  1. 打开“开始”菜单,然后右键单击“计算机”。选择属性。
  2. 选择高级系统设置。
  3. 在“高级”选项卡中,选择“环境变量”。
  4. 选择编辑或新建。(对于PATH,您最有可能要编辑)。
  5. 添加您的位置路径。例如:C:\wamp\bin\php\php5.5.12;

我希望这可以澄清一些混淆。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.