当你在shell命令行输入一条命令时,shell的搜寻顺序是如何的呢?当你的脚本名字和shell中的函数名字重名,shell是如何决定运行哪一个的?
在shell中,shell对于命令的搜寻优先级为:
1 Alias
2 keyword,如if
3 Function
4 Built-in,如cd
4 PATH中的脚本以及可运行程序
在shell中,有3个命令command,built-in,enable是专门来解决这种重名问题的。
command
command使shell只在Built-in以及PATH中搜寻命令,这个命令比较有用的两个option:
-v 打印要调起的命令的路径
-V 比-v选项更详细的信息
built-in
built-in使shell专门搜索Built-in命令
enable
enable命令可以关闭开始shell的Built-in命令,在enable后面直接接shell的Built-in命令,开启这个Built-in命令,如果使用了-n选项,就是关闭这个Built-in命令。如果enable只使用-n选项,不接任何命令,就打印所有被关闭的Built-in命令。除了-n选项,比较有用的选项还有:
-p 打印所有enable的Built-in命令
-a 打印所有的Built-in命令,并且带有开启/关闭信息
但是,最有效的避免冲突的方式,还是使用命令的绝对路径