对于任何初级 POSIX 用户来说,能够编辑你的 $PATH 都是一项重要的技能,无论你使用 Linux、 BSD 还是 macOS。
当你在 Linux 或其他类 Linux 操作系统中的命令提示符中键入命令时,你所做的只是告诉它运行一个程序。即使是简单的命令,如 ls、mkdir、 rm 等,也只是通常位于计算机上名为 /usr/bin 的目录中的小型程序。你的系统上还有其他一些地方也通常存放可执行程序;一些常见的包括 /usr/local/bin、 /usr/local/sbin 和 /usr/sbin。哪些程序存放在哪里,以及为什么,超出了本文的范围,但要知道可执行程序实际上可以存放在你计算机上的任何位置:它不必局限于这些目录之一。
当你在 Linux shell 中键入命令时,它不会在每个目录中查找是否有同名的程序。它只会查找你指定的目录。它是如何知道在上面提到的目录中查找的呢?这很简单:它们是环境变量 $PATH 的一部分,你的 shell 会检查该变量以了解在哪里查找。
查看你的 PATH
有时,你可能希望将程序安装到计算机上的其他位置,但能够轻松执行它们,而无需指定它们的精确位置。你可以通过将目录添加到你的 $PATH 来轻松实现这一点。要查看你的 $PATH 中现在的内容,请在终端中键入以下内容
echo $PATH
你可能会看到上面提到的目录,以及其他一些目录,它们都用冒号分隔。现在让我们向列表中添加另一个目录。
设置你的 PATH
假设你编写了一个名为 hello.sh 的小型 shell 脚本,并将其放在名为 /place/with/the/file 的目录中。此脚本为你当前目录中的所有文件提供了一些有用的功能,你希望能够在任何目录中执行它。
只需使用以下命令将 /place/with/the/file 添加到 $PATH 变量中
export PATH=$PATH:/place/with/the/file
现在你应该能够在系统上的任何位置通过键入其名称来执行该脚本,而无需在键入时包含完整路径。
永久设置你的 PATH
但是,如果你重启计算机或创建新的终端实例会发生什么?你添加到路径中的内容消失了!这是设计使然。变量 $PATH 在你的 shell 每次启动时都会设置,但是你可以将其设置为始终包含你的新路径,以便在你打开的每个新 shell 中都包含它。具体方法取决于你正在运行的 shell。
不确定你正在运行哪个 shell?如果你正在使用几乎任何常见的 Linux 发行版,并且没有更改默认设置,那么你很可能正在运行 Bash。但是你可以使用一个简单的命令来确认这一点
echo $0
那是 "echo" 命令,后跟一个美元符号 ($) 和一个零。$0 表示命令的第零段(在命令 echo $0 中,单词 "echo" 因此映射到 $1),或者换句话说,是运行你的命令的东西。通常这是 Bash shell,尽管还有其他 shell,包括 Dash、 Zsh、 Tcsh、 Ksh 和 Fish。
对于 Bash,你只需将上面的一行代码 export PATH=$PATH:/place/with/the/file 添加到 shell 启动时将读取的相应文件中即可。有几个不同的位置可以想象地设置变量名:可能在一个名为 ~/.bash_profile、 ~/.bashrc 或 ~/.profile 的文件中。这些文件之间的区别(主要是)是 shell 何时读取它们。如果你不确定将其放在哪里,~/.bashrc 是一个不错的选择。
对于其他 shell,你将需要找到在启动时设置配置的适当位置;ksh 配置通常在 ~/.kshrc 中找到,zsh 使用 ~/.zshrc。查看你的 shell 文档以查找它使用的文件。
这是一个简单的答案,还有更多值得学习的怪癖和细节。就像 Linux 中的大多数事物一样,做事的方法不止一种,你可能会找到更符合你的情况或你的 Linux 发行版的特性的其他答案。祝你编程愉快,祝你好运,无论你的 $PATH 将你带向何方。
本文最初于 2017 年 6 月发布,并由编辑更新了更多信息。
4 条评论