我如何$PATH
在Ubuntu中添加目录并使更改永久生效?
我如何$PATH
在Ubuntu中添加目录并使更改永久生效?
Answers:
设置的路径.bash_profile
只能在bash登录shell(bash -l
)中设置。如果您输入路径,.profile
则整个桌面会话都可以使用它。这意味着即使是超能力也将使用它。
例如~/.profile
:
if [ -d "$HOME/bin" ] ; then
PATH="$PATH:$HOME/bin"
fi
顺便说一句,您可以通过在中查看其环境来检查PATH变量/proc/[pid]/environ
(将[pid]替换为from中的数字ps axf
)。例如使用grep -z "^PATH" /proc/[pid]/environ
bash
作为登录shell不解析.profile
如果任一.bash_profile
或.bash_login
存在。来自man bash
:
它按该顺序查找〜/ .bash_profile,〜/ .bash_login和〜/ .profile,并从存在的且可读的第一个命令中读取并执行命令。
请参阅以下答案,以获取有关.pam_environment
或.bashrc
交互式非登录外壳程序的信息,或者通过将脚本放入/etc/profile.d/
或用于/etc/X11/Xsession.d/
影响显示管理器会话来为所有用户全局设置值。
PATH="$HOME/bin:$PATH"
所以我要添加它吗?
.bashrc
在您的主目录中编辑并添加以下行:
export PATH="/path/to/dir:$PATH"
您将需要提供您的信息.bashrc
或注销/登录(或重新启动终端),以使更改生效。要获取您的.bashrc
,只需键入
$ source ~/.bashrc
.bashrc
?您如何“重启终端”?
. .bashrc
不是.bashrc
:)或source .bashrc
关于此事
建议在以下位置定义适用于所有用户的系统范围内的永久环境变量:
/etc/environment
(这PATH
是定义默认值的地方)
这将在台式机或控制台,gnome-terminal或TTY,雨天或晴天下工作;)
要编辑,请按Alt+ F2并键入:
gksudo gedit /etc/environment
(或sudo
在您喜欢的文本编辑器中使用打开文件)
要执行更改,请运行. /etc/environment
。由于该文件只是一个简单的脚本,它将运行并为PATH
环境变量分配新路径。要检查运行env并查看PATH
清单中的值。
有关:
source /etc/environment
以重新加载更改
我认为Ubuntu中的规范方法是:
在下面创建一个新文件 /etc/profile.d/
sudo vi /etc/profile.d/SCRIPT_NAME.sh
在此添加:
export PATH="YOUR_PATH_WITHOUT_TRAILING_SLASH:$PATH"
并赋予它执行权限
sudo chmod a+x /etc/profile.d/SCRIPT_NAME.sh
对于更熟悉GUI的完全新手(例如我):
$HOME
文件夹。.profile
然后单击“ 使用文本编辑器打开”。PATH="$PATH:/my/path/foo"
。.profile
)。$PATH:
其中包括现有的PATH定义位
对于仅特定用户可用的持久性环境变量。我强烈建议Ubuntu官方文档。
https://help.ubuntu.com/community/EnvironmentVariables
参考上面的文档,我通过以下方法设置了我的Android SDK路径工具:
~/.pam_environment
在主目录中创建文件。PATH DEFAULT=${PATH}:~/android-sdk-linux/tools
。将该行放入~/.bashrc
文件中。
每当您打开终端时,它都会被获取
编辑:基于以下注释,对于将应用于所有外壳程序(包括当您在Unity中打Alt- F2时)的更常规设置,将行添加到~/.profile
文件中。但是,可能不应该同时使用这两种方法,因为PATH
打开终端后,路径会两次添加到您的环境中。
$HOME/.profile
为个人设置或/etc/profile
所有用户设置路径。但是,如果只需要bash,我想两者都会起作用。
~/.bashrc
,则仅在打开的终端中可用。例如,如果您按Alt + F2并尝试从该目录运行命令,则找不到该命令。如果在~/.profile
或中设置它~/.pam_environment
,则gnome会话(或使用的任何DE)都将继承它。追加PATH中的~/.bashrc
另一个缺点是,如果您从另一个交互式bash shell中以交互方式打开/执行bash,则会被多次追加。
~/.profile
在这种情况下,我也同意。
要将其设置为系统范围,请将行追加export PATH=/path/you're/adding:$PATH
到的末尾/etc/profile
。
要仅为已登录用户添加目录,请将同一行附加到~/.bash_profile
。
将其添加到.bashrc可以正常工作,但是我认为设置路径变量的更传统方法是在.bash_profile中添加以下几行。
PATH=$PATH:/my/path/foo
export PATH
根据该线程,Ubuntu的行为似乎与RedHat和克隆的行为略有不同。
.bash_profile
。如果bash找不到.bash_profile
(当您以交互方式登录时),它将查找.profile
并使用它。默认情况下,在Ubuntu 中将有一个.profile
和.bashrc
。.profile
如果不考虑pam_env,这是设置环境变量的正确位置。
在终端,cd
到the_directory_you_want_to_add_in_the_path
echo "export PATH=$(pwd):\${PATH}" >> ~/.bashrc
sudo vi /etc/profile.d/SCRIPT_NAME.sh
添加在那里
export PATH=YOUR_PATH_WITHOUT_TRAILING_SLASH:$PATH
sudo nano /etc/profile.d/SCRIPT_NAME.sh
对于初学者来说比较容易。
gksu gedit /etc/profile.d/SCRIPT_NAME.sh
更容易。
推荐的编辑方式PATH
是来自/etc/environment
文件
输出示例/etc/environment
:
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
例如,要添加新的路径 /home/username/mydir
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/username/mydir"
然后,重新启动PC。
系统范围的环境变量
/ etc / environment是适合影响整个系统(而不只是特定用户)的环境变量设置的文件。一种替代方法是在/etc/profile.d目录中为此目的创建一个文件。
/ etc /环境
该文件专门用于系统范围的环境变量设置。它不是脚本文件,而是由赋值表达式组成,每行一个。
注意:变量扩展在/ etc / environment中不起作用。
可以在这里找到更多信息:EnvironmentVariables
打开终端,输入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"
关闭并打开终端,它应该可以正常工作。
即使系统脚本未使用此脚本,在任何情况下,如果$HOME/bin
要向PATH环境变量添加路径(例如),也应使用
PATH="${PATH:+${PATH}:}$HOME/bin"
用于附加(而不是PATH="$PATH:$HOME/bin"
),以及
PATH="$HOME/bin${PATH:+:${PATH}}"
用于前置(而不是PATH="$HOME/bin:$PATH"
)。
这样可以避免在$PATH
最初为空时产生虚假的前导/尾随冒号,而冒号可能会产生不良影响。