起源
当出现 PATH
下有一个与系统命令重名的命令时,先执行哪一个呢?当 PATH
下有多个重名命令,会执行哪一个呢?这就涉及到 SHELL 执行命令的寻找顺序。
默认顺序
shel在执行命令时,并不是直接就在PATH路径中查找,而是按照固定的位置依次寻找命令。
搜索顺序如下,
1、别名,使用 alias 创建的命令。
2、关键字,如if,for。
3、函数
4、内置命令,如cd,pwd等
5、外部命令,在PATH路径中寻找
指定位置
如果我想执行的是我自己的程序cd呢?或者跳过1,2,3直接执行内置命令呢?那么这时候就用到command和builtin这两个命令了。
-
command
,执行PATH下的命令。 -
builtin
,执行内置命令。
PATH中的查找顺序
linux执行命令时在 PATH
中的查找顺序是从前往后查找的。
如 /dir1
和 /dir2
目录下有同一个文件 test
,执行 export PATH=/dir1:/dir2:$PATH
之后,由于 dir1
在 dir2
前面,所以执行 test 时会执行 dir1 中的 test
所以一个比较好的习惯是,导出 PATH
时将新增的路径放在前面如:
export PATH=/xxx:$PATH
参考文献
- Linux--shell寻找命令的顺序
- linux执行命令时在PATH中的查找顺序