这在课程中出现了,我被困了:
许多系统都有多个版本的实用程序,以便用户可以选择他们想要的版本。建议命令查找系统上
make
的所有版本。是什么决定了用户实际得到的是哪一个?用户如何覆盖默认值?
你会怎么做?
答案 0 :(得分:1)
类Unix系统出于历史原因将其可执行程序存储在各种目录中。
当您要运行命令时搜索的目录存储在名为$PATH
的{{3}}中,以冒号(:
)分隔。要查看其内容,请在终端窗口中键入echo "$PATH"
。在我的系统上,显示(拆分以避免长行)
/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:
/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl
他们按此顺序搜索。如果我想运行make
,系统将首先检查/usr/local/sbin/make
(不存在),然后/usr/local/bin/make
(也不存在),然后/usr/bin/make
(确实存在,因此它会运行)。
程序which
可用于查看$PATH
以确定要选择的程序。在我的系统上运行which make
会生成输出/usr/bin/make
。
方便地,which
有一个-a
标记来打印匹配的所有可执行文件,而不仅仅是第一个。 (我通过运行man which
查阅其手册找到了这一点。)因此which -a java
应该告诉您java
的所有版本的位置。
如果您愿意,可以更改$PATH
变量的内容,就像您可以更改任何环境变量一样:如果我运行PATH="$PATH:/home/anko/bin"
,下次系统需要查找程序时,将检查以前所有$PATH
的内容,以及我的主目录中名为bin
的目录,如果它找不到其他内容。
我还可以通过执行PATH="/home/anko/bin:$PATH"
来预先添加目录,使其优先于其他任何目录。