如何将目录添加到PATH?

jus*_*rif 858 environment-variables

如何$PATH在 Ubuntu 中添加目录并使更改永久化?

ko-*_*dos 542

使用 ~/.profile 设置 $PATH

设置的路径.bash_profile只会在 bash 登录 shell ( bash -l) 中设置。如果您将路径放入.profile其中,您的完整桌面会话将可以使用它。这意味着即使是 metacity 也会使用它。

例如~/.profile

if [ -d "$HOME/bin" ] ; then
  PATH="$PATH:$HOME/bin"
fi
Run Code Online (Sandbox Code Playgroud)

顺便说一句,您可以通过查看进程中的环境来检查进程的 PATH 变量/proc/[pid]/environ(将 [pid] 替换为 中的数字ps axf)。例如使用grep -z "^PATH" /proc/[pid]/environ

笔记:

bash作为登录shell不解析.profile如果任一.bash_profile.bash_login存在。来自man bash

它按顺序查找 ~/.bash_profile、~/.bash_login 和 ~/.profile,并从第一个存在且可读的命令中读取和执行命令。

有关或交互式非登录 shell 的信息,请参阅下面答案.pam_environment,或者.bashrc通过将脚本放入/etc/profile.d/或用于/etc/X11/Xsession.d/影响显示管理器会话来为所有用户全局设置值。

  • 这段文档做的很好:[关于环境变量的官方文档](http://help.ubuntu.com/community/EnvironmentVariables#Persistent_environment_variables)。考虑阅读它(不是说更新到最新版本的规则以向环境变量添加值)。 (14认同)
  • 在 Xbunutu 上 .profile 没有被执行,所以我把它放在 .bashrc 中并且它可以工作。 (7认同)
  • 酷,那奏效了。我看到了它会自动添加 bin 目录的位置,所以我只是使用它而不是脚本。泰。 (5认同)
  • 我仍然不知道在哪里添加我的额外路径部分。我需要将 android SDK 添加到我的路径中...`PATH="$HOME/bin:$PATH"` 所以我将它添加到它? (4认同)
  • 我们在 .profile 中的何处添加路径? (3认同)
  • 请记住 .profile 用于登录,因此您必须再次注销登录才能使用它(关闭并重新打开终端是不够的)。@JamieHutber 路径是 `$WHERE_YOU_INSTALLED_THE_SDK/platform-tools` 和 `$WHERE_YOU_INSTALLED_THE_SDK/tools` (3认同)
  • 很抱歉提出非建设性的评论,但是...有人能解释一下为什么他们必须把事情搞得如此复杂吗? (2认同)

Oph*_*ian 385

.bashrc在您的主目录中编辑并添加以下行:

export PATH="/path/to/dir:$PATH"
Run Code Online (Sandbox Code Playgroud)

您将需要获取.bashrc或注销/登录(或重新启动终端)才能使更改生效。要获取您的.bashrc,只需键入

$ source ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

  • `.bashrc` 不是设置环境变量的正确位置。他们应该进入`.profile` 或`.pam_environment`。请参阅 http://mywiki.wooledge.org/DotFiles (27认同)
  • 你如何“获取你的`.bashrc`”?你如何“重启终端”? (4认同)
  • 在 bash 中,它只是 '. .bashrc' (4认同)
  • @老子`。.bashrc` 不是`.bashrc` :) 或`source .bashrc` (4认同)

ish*_*ish 167

定义适用于所有用户的永久性系统范围环境变量的推荐位置是:

/etc/environment
Run Code Online (Sandbox Code Playgroud)

(这PATH是定义默认值的地方)

这将适用于桌面或控制台、gnome 终端或 TTY、风雨无阻;)

要使其在不重新启动的情况下工作,请运行. /etc/environmentsource /etc/environment。由于此文件只是一个简单的脚本,它将运行并将新路径分配给PATH环境变量。检查运行env并查看PATH列表中的值。

有关的:

  • 然后您需要重新启动以使更改生效... (10认同)
  • 采取更改生效运行。/etc/environement(是的,点,空格和 /etc/environment)。由于此文件只是一个简单的脚本,它将运行并将新路径分配给 PATH 环境变量。要检查运行 env 并查看列表中的 PATH 值。 (9认同)
  • 这正是我所需要的。通过 vagrant 提供一次性 vm 映像,并且需要将 node 和 npm 添加到路径中。 (3认同)
  • 我需要运行 `source /etc/environment` 来重新加载更改 (2认同)
  • @JohnnyAW:源相当于初始点,请参见例如https://en.wikipedia.org/wiki/Source_(command)。 (2认同)

wot*_*oto 62

我认为 Ubuntu 中的规范方式是:

  • 将自定义路径添加到 PATH 的末尾而不是开头通常更安全。这可以避免意外地用您的程序(或其他人的恶意程序)替换系统命令。当其他人在您的系统上工作(或向您提供建议)并且他们从您“替换”的命令中获得意外结果时,这也避免了很多混乱。 (26认同)

dai*_*ain 55

对于完全熟悉 GUI 的新手(像我一样):

  1. 打开你的$HOME文件夹。
  2. 转到查看显示隐藏文件或按Ctrl+ H
  3. 右键单击.profile并单击“使用文本编辑器打开”
  4. 滚动到底部并添加PATH="$PATH:/my/path/foo".
  5. 节省。
  6. 注销并重新登录以应用更改(让 Ubuntu 实际加载.profile)。

  • 不再推荐编辑 .profile 文件。您仍然可以使用此方法编辑文件 .pam_environment 参见:https://help.ubuntu.com/community/EnvironmentVariables (5认同)
  • 由于所有路径都被覆盖,此答案导致我的系统停止登录。使用 Ubuntu 16.04。 (3认同)
  • @Frisbetarian 您必须确保添加包含现有 PATH 定义的 `$PATH:` 位 (3认同)
  • home 文件夹不是指名为 home 的文件夹,而是在终端输入“cd ~”时进入的文件夹 (2认同)

Edu*_* B. 47

对于仅对特定用户可用的持久环境变量。我强烈推荐 Ubuntu 官方文档。

https://help.ubuntu.com/community/EnvironmentVariables

参考上面的文档,我通过以下方式设置了我的Android SDK 路径工具

  1. ~/.pam_environment在主目录中创建文件。
  2. 其中的内容是PATH DEFAULT=${PATH}:~/android-sdk-linux/tools
  3. 可以通过用冒号 (:)分隔路径来添加其他自定义用户路径。
  4. 这需要重新登录,这意味着您需要注销并重新登录到桌面环境。


Ian*_* B. 27

将该行放在您的~/.bashrc文件中。

每当您打开终端时,它就会被获取

编辑:基于下面的评论,因为这将适用于所有的shell(包括当你打一个更一般的设置Alt-F2在Unity),该行添加到您的~/.profile文件。但是,可能不应该同时执行这两项操作,因为PATH如果您打开终端,路径将被添加到您的环境中两次。

  • 我有一段时间没有真正研究这个,所以我搜索了一下,似乎至少有 95 种不同的设置路径的方法,其中大部分都在 [here](http://askubuntu.com /q/60218/39753)。我从来没有想出哪个是最好的。不过,我认为 `~/.profile` 对于个人路径是正确的;这就是 Ubuntu 添加 `~/bin` 目录的地方。我承认我在方法的数量上有点夸大了——只是一点点。 (3认同)
  • @geirha - 我同意互联网上的大多数指南一般都可能是废话,尤其是任何 linux,因为不同的发行版,甚至同一发行版的不同版本,做的事情都不一样。它通常归结为有效的方法,但大多数人没有意识到有效的只是有效的方法,不一定是正确的,甚至永远有效的方法。我试图找出多种方法中的哪一种实际上是正确的,因为我讨厌做不止一次的事情——但这并不总是那么容易。:) (3认同)
  • 实际上,我认为您在“$HOME/.profile”中为个人设置设置了路径,或者在所有用户的“/etc/profile”中设置了路径。但如果它只需要用于 bash,我想两者都可以。 (2认同)
  • 如果你在`~/.bashrc` 中设置它,它只会在你打开的终端中可用。例如,如果您按 Alt+F2 并尝试从该目录运行命令,它将找不到它。如果你在`~/.profile` 或`~/.pam_environment` 中设置它,gnome 会话(或你使用的任何DE)将继承它。在`~/.bashrc` 中附加 PATH 也有一个缺点,如果你从另一个交互式 bash shell 交互式地打开/执行 bash,它会被附加多次。 (2认同)
  • @MartyFried,是的,引用 freenode 上 #bash 中的机器人:«互联网上绝大多数 bash 脚本、代码、教程和指南都是废话。鲟鱼是个乐观主义者。» 使用 google 解决 bash 问题,在找到一个好的解决方案之前,您通常会找到很多半途而废的解决方案。哦,在这种情况下,我也会使用 `~/.profile`。 (2认同)

小智 17

要将其设置为系统范围,请将行附加export PATH=/path/you're/adding:$PATH/etc/profile.

要仅为登录用户添加目录,请将同一行附加到~/.bash_profile.


3di*_*nce 16

将它添加到 .bashrc 会起作用,但我认为设置路径变量的更传统的方法是在 .bash_profile 中添加以下几行。

PATH=$PATH:/my/path/foo
export PATH
Run Code Online (Sandbox Code Playgroud)

根据此线程,似乎 Ubuntu 的行为与 RedHat 和克隆版本略有不同。

  • 如果你有`.bashrc`,把它放在`.bashrc` 中。Ubuntu 中的 GUI 终端不是登录 shell,因此不会运行 `.bash_profile`。 (7认同)
  • @justingrif 不,你不需要`.bash_profile`。如果 bash 没有找到 `.bash_profile`(当你以交互方式登录时),它会寻找 `.profile` 并使用它。默认情况下,您将在 Ubuntu 中拥有一个 `.profile` 和 `.bashrc`。如果我们忽略 pam_env,`.profile` 是设置环境变量的正确位置。 (3认同)
  • 如果您的 shell 是登录 shell,两者都可以使用。但我只是在我的一台 Ubuntu 机器上尝试了 .bash_profile 方法,即使在重新启动我的 gnome 会话后,它也没有提供我的 .bash_profile。所以我会说把它放在 .bashrc 中可能是 Ubuntu 的方法。 (2认同)

小智 11

在终端,cdthe_directory_you_want_to_add_in_the_path

echo "export PATH=$(pwd):\${PATH}" >> ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

这不是我的主意。我在此博客中找到了这种导出路径的方法。


小智 9

sudo vi /etc/profile.d/SCRIPT_NAME.sh
Run Code Online (Sandbox Code Playgroud)

在那里添加

export PATH=YOUR_PATH_WITHOUT_TRAILING_SLASH:$PATH
Run Code Online (Sandbox Code Playgroud)

  • `sudo nano /etc/profile.d/SCRIPT_NAME.sh` 对初学者来说更容易。 (2认同)

小智 7

每当我“安装”我的 BASH 脚本文件夹时,我都会按照测试模式对$HOME/bin最近版本的 Ubuntu 中大多数 .profile 文件中的文件夹进行测试。我设置了一个看起来像的测试

if [ -d "/usr/scripts" ]; then
   PATH="/usr/scripts:$PATH"
fi
Run Code Online (Sandbox Code Playgroud)

它大约 100% 的时间都可以工作,如果我决定移到/scripts离我的$HOME文件夹更近的某个地方,我可以使用快速“全部替换”在 GUI 文本编辑器中自由地更改它。我在 6 次 Ubuntu 安装中没有这样做,但“永远是明天”。

BZT


Ben*_*nny 7

推荐的编辑方法PATH是从/etc/environment文件

示例输出/etc/environment

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
Run Code Online (Sandbox Code Playgroud)

例如,添加新路径 /home/username/mydir

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/username/mydir"
Run Code Online (Sandbox Code Playgroud)

然后,重新启动您的 PC。


系统范围的环境变量

影响整个系统(而不仅仅是特定用户)的环境变量设置的合适文件是 /etc/environment。另一种方法是在 /etc/profile.d 目录中为此目的创建一个文件。

/etc/环境

此文件专门用于系统范围的环境变量设置。它不是一个脚本文件,而是由赋值表达式组成,每行一个。

注意:变量扩展在 /etc/environment 中不起作用。

更多信息可以在这里找到:EnvironmentVariables

  • 最低的答案却是最正确的。该文件通常是带有路径的自动填充 bin Ubuntu。 (2认同)

小智 5

打开您的终端,输入gedit .profile并插入以下内容:

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$PATH:$HOME/bin"
fi

 #the following line add Bin where you dont have a Bin folder on your $HOME
    PATH="$PATH:/home/mongo/Documents/mongodb-linux-i686-2.2.2/bin"
Run Code Online (Sandbox Code Playgroud)

关闭并打开终端,它应该可以工作。