我使用带有 bash shell 的 Ubuntu 14.10。
我下载了一个gradle
发行版并将其移动到新目录。我想永久设置一个环境变量以指向bin
gradle 文件夹的子目录。
我已经按照建议进行了编辑~/.bashrc
,~./profile
包括了 gradle 运行脚本的路径。但是当我输入gradle
(这是 bin 文件夹中脚本的名称)时,它并没有运行。注销、重新启动等操作后,它仍然不起作用。
这里我遗漏了什么吗?
在末尾添加了这一行
.bashrc
导出 GRADLE=/home/sanctus/Documents/Development/gradle-2.2/bin
我的
~/.profile
文件内容如下:# ~/.profile: executed by the command interpreter for login shells. # This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login # exists. # see /usr/share/doc/bash/examples/startup-files for examples. # the files are located in the bash-doc package. # the default umask is set in /etc/profile; for setting the umask # for ssh logins, install and configure the libpam-umask package. #umask 022 # if running bash if [ -n "$BASH_VERSION" ]; then # include .bashrc if it exists if [ -f "$HOME/.bashrc" ]; then . "$HOME/.bashrc" fi fi # set PATH so it includes user's private bin if it exists if [ -d "$HOME/bin" ] ; then PATH="$HOME/bin:$HOME/sanctus/Documents/Development/gradle-2.2/bin" fi gradle="$HOME/sanctus/Documents/Development/gradle-2.2/bin" export gradle
答案1
首先,您不想这样做gradle="..."
。这只会创建一个名为的变量gradle
,并且是无关紧要的(除非该变量以某种方式被使用gradle
但您没有这么说)。您想要做的是将包含gradle
可执行文件的目录添加到系统在尝试查找要运行的程序时搜索的目录列表中。这就是变量的作用PATH
。
不要覆盖 的现有内容也很重要PATH
。因此,要添加foo
到PATH
,您需要执行以下操作:
PATH:"$PATH":foo
并不是
PATH="foo"
后者将删除其中的所有内容PATH
,并用单独内容替换foo
。
因此,结合所有这些,您需要将以下几行添加到您的~/.profile
(或~/.bash_profile
如果存在,但不是到您的~/.bashrc
):
PATH:"$PATH:$HOME/sanctus/Documents/Development/gradle-2.2/bin"
为什么是~/.profile
或~/.bash_profile
而不是~/.bashrc
?首先,因为这就是配置文件的用途。更重要的是,~/.bashrc
每次启动新 shell 时都会读取。例如,每次打开新终端时。设置只需在该文件中设置一次的环境变量,会导致每次打开终端时都重置它们,这只是不必要的开销。
此外,中的设置仅影响从命令行启动的程序。如果您使用 GUI 启动某些程序(例如~/.bashrc
菜单项或文件),则这些变量将不可用。.desktop
在许多系统(包括 Ubuntu)中,~/.profile
当您以图形方式登录时,该文件会被读取。因此,该文件中设置的变量也将可供 GUI 程序使用。此外,~/.profile
最好将这些变量设置为 ,因为该文件只会读取一次:在登录时。
此外,即使你将 shell 更改为 bash 以外的其他 shell,它仍会起作用,因为~/.profile
许多最流行的 shell 都可以读取它。
重要的:如果~/.bash_profile
存在,则会读取 而不是~/.profile
。因此,如果您确实有这样的文件,请使用该文件。我的建议是,如果您有~/.bash_profile
,请直接删除它并将其中的任何内容添加到您的标准 中~/.profile
。
答案2
首先你应该确保你的脚本具有执行权限:
chmod +x $HOME/sanctus/Documents/Development/gradle-2.2/bin/gradle
您可能需要使用sudo
上述 chmod 来执行。
现在你错过了,当你调用时gradle
你正在使用环境变量小路。
PATH 是 Linux 和其他类 Unix 操作系统中的环境变量,它告诉 shell 在哪些目录中搜索可执行文件
即使您将路径添加到 $PATH 您是在 .profile 中执行的,而您必须在 中执行此操作.bashrc
。
那么为什么是.bashrc而不是.profile?
请看一下我的答案https://askubuntu.com/a/633820/150504
现在回到解决方案:
gedit .bashrc
添加以下行:
export PATH=$PATH:$HOME/bin:$HOME/sanctus/Documents/Development/gradle-2.2/bin
现在保存并退出然后获取它
source .bashrc
现在测试一下。
紧急更新:
PATH="$HOME/bin:$HOME/sanctus/Documents/Development/gradle-2.2/bin"
这会扭曲您的 PATH,并且您无法使用 /bin、/usr/bin 等中的任何命令,因为这样您只需覆盖 PATH 并将其设置为两个目录 $HOME/bin 和 $HOME/sanctus/Documents/Development/gradle-2.2/bin。从您的 .profile 中删除此行。
测试它是否影响你的系统,
echo $PATH
结果应该是(可能略有不同):
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
如果不是,你应该解决问题。将其添加到你的 .profile 中
$PATH=/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games