Linux下如何在PATH中添加目录

614人浏览   2023-10-23 15:36:43

通常,用于启动已安装程序的可执行文件的位置将被添加到Linux中。因此,您可以从shell中的任何位置运行程序,而无需输入可执行文件的完整路径。然而,在某些情况下,您需要手动将程序的安装位置添加到。在这个简短的教程中,我们将看到如何在Linux操作系统中添加一个目录到PATH。

为什么我们要在$PATH中添加一个目录?

前几天,我在测试一个名为Macchina的程序,它是用Rust编程语言编写的。所以我在Ubuntu系统中用软件包管理器安装了Rust,然后用Rust的软件包管理器condacargo安装了Macchina
当我试图启动Macchina程序时,输出说程序没有安装。再次,我试图安装它,并得到以下错误消息:

 Updating crates.io index
     Ignored package `macchina v0.5.9` is already installed, use --force to override
warning: be sure to add `/home/sk/.cargo/bin` to your PATH to be able to run the installed binaries

正如你可能已经知道的,当我们安装一个用Rust编写的程序时,可执行二进制文件将被保存在Cargo的bin目录下(i.e.)。~ / .cargo / bin

$ ls ~/.cargo/bin/
macchina

如您所见,Macchina二进制文件保存在cargo bin目录中。在安装Rust之后,我应该将这个目录添加到我的$PATH中,但是我忘记了。因此出现了上述问题!
如果我使用安装程序脚本安装Rust,我就不会遇到这个问题。因为rustup脚本会通过修改位于~/.profile的概要文件,自动将Cargo的bin目录添加到环境变量中。但是在本例中,我在一个环境中安装了Rust,并且cargo bin目录没有添加到PATH.rustup$PATHconda中。

在$PATH中列出环境变量
让我们列出所有使用command.$PATHecho的环境变量

$ echo $PATH

输出:

/home/sk/anaconda3/envs/rustenv/bin:
/home/sk/anaconda3/condabin:/home/sk/.nvm/versions/node/v15.0.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

正如您在上面的输出中看到的,目录在$路径中不可用,因此程序Macchina不能使用它的名字启动。但是,我可以通过键入程序的完整路径来启动程序,如下所示:~/.cargo/bin/

$ ~/.cargo/bin/macchina

为了在任何位置使用程序名运行程序,我们需要将其添加到PATH中,如下节所示。

Linux下添加目录到PATH中

添加目录,例如在$PATH下执行:/home/sk/.cargo/bin/

$ export PATH=/home/sk/.cargo/bin:$PATH

请注意目录路径末尾的冒号(:)。
现在使用command:echo再次列出环境变量

$ echo $PATH

输出:

/home/sk/.cargo/bin:/home/sk/anaconda3/envs/rustenv/bin:/home/sk/anaconda3/condabin:/home/sk/.nvm/versions/node/v15.0.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

看到了吗?目录已被添加到。从现在开始,我可以通过调用程序名来启动安装在这个目录中的任何程序。~/.cargo/bin$ path
请注意这是暂时的。退出当前会话后,环境变量将消失。要使更改永久生效,请编辑文件:~/.bashrc

$ nano ~/.bashrc

在末尾添加以下一行:

export PATH=/home/sk/.cargo/bin:$PATH

按ctrl +OCTRL+X保存文件并退出
执行如下命令使修改立即生效:

$ source ~/.bashrc

如果您想在系统范围内执行此操作,请在./etc/profile中添加相同的行。


相关推荐