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

slh*_*hck 385 path environment-variables community-faq

关于的问题

  • 设置环境变量
  • PATH

在这里很常见,而且在大多数情况下,答案彼此非常相似。将来有一个很好的 Q/A 会很好。

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

一个好的答案将包括对环境变量的简单解释,特别PATH是对操作系统的意义,以及如何相应地设置和读取它们的简单指南。

Dan*_*eck 372

什么是环境变量?

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

小路

最著名的一种是PATH在 Windows、Linux 和 Mac OS X 上调用。它指定可执行程序*位于机器上的目录,无需知道并在命令行上键入文件的整个路径即可启动. (或在 Windows 中,开始菜单中的运行对话框或Win+ R)。

在 Linux 和 Mac OS X 上,它通常包含binsbin当前用户相关的所有目录。在 Windows 上,它至少包含C:\WindowsC:\Windows\system32目录——这就是为什么您可以从命令行或运行对话框运行 calc.exe或,但不能运行. (Firefox 位于。有关如何包含 Firefox 的信息,请转到此处。)notepad.exefirefox.exeC:\Program Files\Mozilla 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
    
    Run Code Online (Sandbox Code Playgroud)

    在运行对话框中。

  3. 右键单击(我的)电脑并单击属性,或只需按Win+ Break

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

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

还有快速环境编辑器,它有助于在 Windows 中设置和更改环境变量,而无需深入系统设置。另一个可以非常方便地编辑路径环境的 Windows 开源程序是路径编辑器

命令行

格式

Windows 中的环境变量在名称周围用百分号 (%) 表示:

%name%
Run Code Online (Sandbox Code Playgroud)

回声

要在 中显示环境变量的值cmd.exe,请键入echo %name%

C:\>echo %USERPROFILE%
C:\Users\Daniel
Run Code Online (Sandbox Code Playgroud)

创建/设置变量,请使用set varname=value

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

C:\>set FunnyCatPicturesTwo=%USERPROFILE%\Pictures\Funny Cat Pictures 2
Run Code Online (Sandbox Code Playgroud)

追加/添加变量,请使用set varname=value;%varname%

C:\>set Penguins=C:\Linux

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

C:\>echo %Penguins%
C:\Windows;C:\Linux
Run Code Online (Sandbox Code Playgroud)

以这种方式设置的环境变量在设置它们的命令提示符进程的(其余)持续时间内可用,并且可用于设置变量后启动的进程。

设置

永久创建/设置变量,请使用: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
Run Code Online (Sandbox Code Playgroud)

与 不同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。许多众所周知的标准变量都用大写字母拼出以表示这一点。请记住,变量名区分大小写,这意味着从 shell 的角度来看,$User 和 $USER 完全无关。

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

设置变量

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

export命令是定义变量的标准方法。语法非常直观。这两行的结果是相同的,但如果需要可移植到 pre-POSIX Bourne shell,则首选第一种选择。

var=value; export var
export var=value
Run Code Online (Sandbox Code Playgroud)

C shell 及其后代使用完全不同的语法;在那里,命令是setenv

有关此主题的更深入讨论,请参阅 Linux 文档项目Path 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:路径方法

  • 从 Windows Vista 开始,您可以使用“SETX”进行永久更改。它的语法略有不同。对于早期版本的“NT”,必须从“Windows Server 2003 Resource Kit”中添加“SETX”。 (11认同)
  • @JdeBP您可能还会注意到这个问题本质上是相当基本的。仔细解释环境变量的更改如何分布的复杂性(说真的,`WM_SETTINGCHANGE`?Windows API?这不是这个问题的听众!)可能不是一个好主意,因为它可能会使读者感到困惑而不是解释这些变量是关于。 (3认同)
  • @JdeBP 部分标题旨在参考*如何在用户界面上设置这些值*,在 Windows 上称为 *shell*,与下面的部分 *命令行界面* 形成对比。我什至在 10 小时前看到你的评论之前就编辑了这个。没有人提到这仅适用于 Explorer。 (2认同)

use*_*686 75

这篇文章是从比 Daniel 的更具技术性的角度出发的,但并没有解释那么多的概念。


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

Linux 和大多数 BSD

在大多数命令行 shell 中,临时环境变量是使用export(sh, bash, zsh) 或setenv(csh, tcsh) 命令设置的。

可以在几个单独的阶段设置持久性环境变量:

  • 登录:

    • 登录会话设置: Linux pam_env,通常从/etc/environment

    • 终端登录:shell 的“配置文件”文件。

      • bash使用/etc/profile和第一个:~/.bash_profile, ~/.bash_login, ~/.profile。手册页bash(1)部分调用

        通常,用户的配置文件也包含显式调用~/.bashrc

      • zsh:手册页zsh(1)部分启动/关闭文件

      • csh 和其他外壳:请参阅相应的手册页。

    • 图形登录:不确定;可能因登录管理器而异。GDM 似乎~/.profile在我的系统中读取。

  • 打开终端窗口:

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

视窗NT系列

  • 在命令提示符 ( cmd.exe) 中,用于set name=value更改该窗口的环境变量。

    要附加c:\bin%PATH%,请使用:

    set path=%path%;c:\bin
    
    Run Code Online (Sandbox Code Playgroud)

    这只会影响该cmd.exe进程,以及从它启动的任何进程。

  • 要进行持久更改,请使用控制面板?系统 ?先进的 ?环境变量。(文档

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

    更改存储到注册表(见下文),并立即应用于由资源管理器(图形外壳)创建的所有进程,例如,通过“开始”菜单。

  • 系统范围的环境变量保存在注册表中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 提示窗口运行.

虚拟机

(无法抗拒。)

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

  • VMS 部分是错误的。DCL 有“[自动外部命令](http://h71000.www7.hp.com./doc/731final/6489/6489pro_033.html#map_nosymb)”的`DCL$PATH`。 (2认同)

Pau*_*l V 11

问: 什么是环境变量?

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

USERPROFILE :操作系统文件中的用户目录。

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

问:PATH 变量具体是什么?

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

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

根据这篇维基百科文章

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


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

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

此处描述一种方法:

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

我希望这能澄清一些困惑。


Bil*_*key 10

对于bashshellPATH全局(非终端)环境变量,我遵循我的 Ubuntu VM 安装中使用的约定——其他 shell 会有所不同:

警告:整个 shell 启动顺序,哪个.bashrc.profile等文件的来源顺序是什么?,我什么时候必须重新登录才能看到新定义的变量、别名等?,登录之间有什么区别、交互式和非交互式 shell - 我确实使用cron?,为什么当我使用 a 时. ~/.bashrc,我的愚蠢PATH变量会变得越来越长?是我在考虑PATH变量时想到的关键问题。

事实上,我只是从 Ubuntu 和 cygwin 框架文件中汲取灵感,完全重新编写了我的整个 bash 启动文件集,以下是我的一些站点:

  1. 在 ; 中导出PATH和其他全局环境变量(即LD_LIBRARY_PATH)变量.profile
  2. 如果存在,则使用逻辑 in~/.profile来获取$HOME/.bashrc
  3. 栅栏执行~/.bashrc与测试交互执行,否则退出;
  4. 把所有的别名、shopt's、提示设置、历史控制、终端设置、函数定义等(交互相关的设置)放在~/.bashrc被保护的部分,只在交互模式下运行;
  5. 去掉其他 bash 启动文件,因为它们的存在决定了控制路径是否通过.profile并按.bashrc预期工作。也就是说,除非有特殊要求,否则删除~/.bash_profile& ~/.bash_login;
  6. 当我在 bash 提示符下,我需要更新一些默认设置时,我编辑我的~/.bashrc文件,然后简单地使用 a. ~/.bashrc获取它以在我当前的 shell 中获取这些更改。
  7. 当我更改环境变量时,如PATH,我需要修改并获取我的~/.profile;
  8. 我在.profile.

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


Raf*_*Raf 5

Windows 10,没有管理员帐户

控制面板 -> 用户帐户 -> 用户帐户 -> 更改我的环境变量

请注意,您必须单击标题“用户帐户”请注意,您必须单击标题“用户帐户”

再次,您必须单击标题“用户帐户”再次注意,您必须单击标题“用户帐户”

更改我的环境变量

环境变量