File tree Expand file tree Collapse file tree 1 file changed +98
-80
lines changed
Expand file tree Collapse file tree 1 file changed +98
-80
lines changed Original file line number Diff line number Diff line change 11enable
22===
33
4- 启动或关闭shell内建命令
4+ 启动或禁用shell内建命令
55
6- ## 补充说明
76
8- ** enable命令 ** 用于临时关闭或者激活指定的shell内部命令。若要执行的文件名称与shell内建命令相同,可用 ` enable -n ` 来关闭shell内建命令。若不加 ` -n ` 选项,enable可重新启动关闭的命令。
7+ ### 概要
98
10- linux shell命令执行时,shell总是先在自己的shell builtin中查找该命令,如果找到则执行该命令;如果找不到该命令,则会从环境变量$PATH指定的路径中依次去查找待执行的命令。因为了解了这一点,所以看起来好像没有办法编写用户自己的命令来替代shell builtin命令。幸运的是,有了enable命令我们就能做到了。
9+ enable [ -a ] [ -dnps ] [ -f filename ] [ name ... ]
1110
12- ### 语法
11+ ### 主要用途
1312
14- ``` shell
15- enable(选项)(参数)
16- ```
13+ - 禁用一到多个内建命令。
14+
15+ - 启用一到多个内建命令。
16+
17+ - 直接调用与禁用的内建命令同名且在` $PATH ` 路径下找到的外部命令。
18+
19+ - 打印所有内建命令,无论是否禁用。
20+ - 打印处于启用状态的内建命令。
21+ - 打印处于禁用状态的内建命令。
22+
23+ - 打印处于启用状态的posix标准内建命令。
24+ - 打印处于禁用状态的posix标准内建命令。
25+ - 打印posix标准内建命令,无论是否禁用。
26+
27+ - 从动态库中加载内建命令。
28+ - 移除从动态库中加载的内建命令。
29+
30+ #### 选项
31+
32+ -a 打印所有内建命令,无论是否禁用。
33+
34+ -d 移除从动态库中加载的内建命令。
35+
36+ -n 禁用内建命令或显示已禁用的内建命令。
37+
38+ -p 以可复用格式打印。
39+
40+ -s 只显示处于启动状态的posix标准内建命令。
41+
42+ -f 动态库中加载内建命令。
43+
44+ -ns 打印处于禁用状态的posix标准内建命令。
45+
46+ -as 打印posix标准内建命令,无论是否禁用。
47+
48+ #### 参数
49+
50+ filename:动态库文件名。
51+
52+ name(可选):内建命令,可以为多个。
1753
18- ### 选项
54+ #### 返回值
1955
20- ``` shell
21- -n:关闭指定的内部命令;
22- -a:显示所有激活的内部命令;
23- -f:从指定文件中读取内部命令。
56+ enable返回成功,除非name不是内建命令或有错误发生。
57+
58+ ### 例子(以下内容限于篇幅不再列出返回值部分)
59+
60+ ```
61+ #posix special builtin
62+ #假设没有任何内建命令被禁用
63+ #禁用两个posix标准内建命令
64+ enable -n set source
65+ #打印处于禁用状态的posix标准内建命令
66+ enable -ns
67+ #打印posix标准内建命令,无论是否禁用。
68+ enable -as
69+ #打印处于启用状态的posix标准内建命令
70+ enable -s
2471```
2572
26- ### 参数
27-
28- 内部命令:指定要关闭或激活的内部命令。
29-
30- ### 实例
31-
32- 使用enable命令显示所有激活的内部命令:
33-
34- ``` shell
35- [root@localhost ~ ]# enable -a
36- enable .
37- enable :
38- enable alias
39- enable bg
40- enable bind
41- enable break
42- enable builtin
43- enable caller
44- enable cd
45- enable command
46- enable compgen
47- enable complete
48- enable continue
49- enable declare
50- enable dirs
51- enable disown
52- enable echo
53- enable enable
54- enable eval
55- enable exec
56- enable exit
57- enable export
58- enable false
59- enable fc
60- enable fg
61- enable getopts
62- enable hash
63- enable help
64- enable history
65- enable jobs
66- enable kill
67- enable let
68- enable local
69- enable logout
70- enable popd
71- enable printf
72- enable pushd
73+ ```
74+ #假设没有任何内建命令被禁用
75+ #禁用一到多个内建命令
76+ enable -n echo pwd
77+ #打印所有内建命令,无论是否禁用。
78+ enable -a
79+ #打印处于启用状态的内建命令
80+ enable
81+ #打印处于禁用状态的内建命令
82+ enable -n
83+ #启用一到多个内建命令
7384enable pwd
74- enable read
75- enable readonly
76- enable return
77- enable set
78- enable shift
79- enable shopt
80- enable source
81- enable suspend
82- enable test
83- enable times
84- enable trap
85- enable true
86- enable type
87- enable typeset
88- enable ulimit
89- enable umask
90- enable unalias
91- enable unset
92- enable wait
9385```
9486
87+ ### Q&A
88+
89+ Q:请问` -f ` ,` -d ` ,` -p ` 的演示呢?
90+
91+ A:说明一下,` -f ` 与` -d ` 限于个人能力没有找到合适的例子,如果您有更好的例子欢迎提pr;
92+ 经过我验证` -p ` 选项是否使用好像没有区别,可以比较``` enable -p|cat -A ``` 和``` enable|cat -A ``` 有什么区别。(注:` cat -A ` 用于显示不可见字符)
93+
94+ Q:是否可以禁用` enable ` 自己?之后还能禁用或启用内建命令吗?
95+
96+ A:可以;不能。
97+
98+ ### 注意
99+
100+ > linux shell命令执行时,shell总是先在自己的shell builtin中查找该命令,如果找到则执行该命令;如果找不到该命令,则会从环境变量` $PATH ` 指定的路径中依次去查找待执行的命令。看起来好像没有办法编写用户自己的命令来替代shell builtin命令。幸运的是,有了` enable ` 命令我们就能做到了。
101+
102+ 1 . 关于同名命令调用的优先级的知识,请先参考` builtin ` 命令的* 提示* 部分,然后继续阅读下面部分;
103+
104+ 当内建命令` echo ` 没有禁用时,如果要调用外部命令` echo ` ,只能这样写` /usr/bin/echo ` ;
105+
106+ 当我们禁用了` echo ` 后,优先级顺序变成了这样:
107+
108+ 函数 > 外部命令
109+
110+ 如果执行命令的环境没有` echo ` 函数,那么调用的` echo ` 就是外部命令。
111+
112+ 2 . 该命令是bash内建命令,相关的帮助信息请查看 ` help ` 命令。
95113
96- <!-- Linux命令行搜索引擎:https://jaywcjlove.github.io/linux-command/ -->
114+ <!-- Linux命令行搜索引擎:https://jaywcjlove.github.io/linux-command/ -->
You can’t perform that action at this time.
0 commit comments