Bash处理命令的顺序并非不可改变。Bash提供的三条内置命令可以改变命令的处理顺序。
1)command<命令>,忽略别名和函数,按照内置命令和外部命令来处理。
2)builtin<命令>,只查找内置命令,忽略函数和外部命令。
3)enable,禁用或使能内置命令。
下面分别举例说明。
pwd的作用原本是显示当前目录,下面设置一个名字为pwd的别名:
因为别名的优先级最高,所以执行pwd就会执行别名pwd,而不是原本的pwd命令:
这时,要想执行原本的pwd,前面需要加上command。command pwd的作用是,不在别名列表和函数列表里面查找pwd,而是在内置命令和外部命令里面查找并运行pwd,这样,原本的内置命令pwd得到执行:
builtin的作用是只查找内置命令,否则会给出“不是内置命令(not a shell builtin)”的提示。下面这条命令的意思是运行内置命令pwd:(www.xing528.com)
因为ls不是内置命令,所以builtin后面的ls命令不会被执行。
enable的选项-n用来禁用内置命令。例如,禁用内置命令alias后,将无法使用它:
原本alias -p命令可以显示当前的别名列表,禁用alias后,遇到了command not found的提示。
再运行下面的命令,使能内置命令alias,然后内置命令alias就可以正常使用了。
因为外部程序的优先级不如内置命令高,当自己写的脚本与某个内置命令重名、并希望默认情况下自己的脚本而不是内置命令被执行时,可以用enable-n命令来禁用相应的内置命令。但是,正确的做法是,尽可能不要让自己写的脚本和函数与已有的命令(包括内置的与外部的)重名。
接本章第1节继续讨论。操作系统也提供了内置命令,以Ubuntu为例,下面的这几条命令,内置命令包含它们,外部命令当中也有它们。
重名情况下,可以在前面加builtin来确保内置命令被执行,或者用命令enable-n来禁止某条内置命令被执行,从而使外部命令得到执行的机会。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。