Linux enable命令使用详解
Shell enable命令用于临时关闭或者激活指定的shell内部命令。若要执行的文件名称与shell内建命令相同,可用enable -n来关闭shell内建命令。若不加-n选项,enable可重新启动关闭的命令。
linux shell命令执行时,shell总是先在自己的shell builtin中查找该命令,如果找到则执行该命令;如果找不到该命令,则会从环境变量$PATH指定的路径中依次去查找待执行的命令。因为了解了这一点,所以看起来好像没有办法编写用户自己的命令来替代shell builtin命令。幸运的是,有了enable命令我们就能做到了。
语法
1 | enable [-a] [-dnps] [-f filename] [name ...] |
选项
1 | -a 打印所有内建命令,无论是否禁用。 |
参数
- filename: 动态库文件名。
- name(可选): 内建命令,可以为多个。
主要用途
禁用一到多个内建命令。
启用一到多个内建命令。
直接调用与禁用的内建命令同名且在
$PATH路径下找到的外部命令。打印所有内建命令,无论是否禁用。
打印处于启用状态的内建命令。
打印处于禁用状态的内建命令。
打印处于启用状态的posix标准内建命令。
打印处于禁用状态的posix标准内建命令。
打印posix标准内建命令,无论是否禁用。
从动态库中加载内建命令。
移除从动态库中加载的内建命令。
返回值
enable返回成功,除非name不是内建命令或有错误发生。
实例
使用enable命令显示所有激活的内部命令:
1 | [root@localhost ~]# enable -a |
1 | # posix special builtin |
1 | # 假设没有任何内建命令被禁用 |
Q&A
Q:请问-f,-d,-p的演示呢?
A:说明一下,-f与-d限于个人能力没有找到合适的例子,如果您有更好的例子欢迎提pr;
经过我验证-p选项是否使用好像没有区别,可以比较enable -p|cat -A和enable|cat -A 有什么区别。(注:cat -A用于显示不可见字符)
Q:是否可以禁用enable自己?之后还能禁用或启用内建命令吗?
A:可以;不能。
注意
linux shell命令执行时,shell总是先在自己的shell builtin中查找该命令,如果找到则执行该命令;如果找不到该命令,则会从环境变量
$PATH指定的路径中依次去查找待执行的命令。看起来好像没有办法编写用户自己的命令来替代shell builtin命令。幸运的是,有了enable命令我们就能做到了。
- 关于同名命令调用的优先级的知识,请先参考
builtin命令的提示部分,然后继续阅读下面部分;
当内建命令echo没有禁用时,如果要调用外部命令echo,只能这样写/usr/bin/echo;
当我们禁用了echo后,优先级顺序变成了这样:
函数 > 外部命令
如果执行命令的环境没有echo函数,那么调用的echo就是外部命令。
- 该命令是bash内建命令,相关的帮助信息请查看
help命令。