1 | enable
|
2 | ===
|
3 |
|
4 | 启动或禁用shell内建命令
|
5 |
|
6 |
|
7 | ### 概要
|
8 |
|
9 | enable [-a] [-dnps] [-f filename] [name ...]
|
10 |
|
11 | ### 主要用途
|
12 |
|
13 | - 禁用一到多个内建命令。
|
14 |
|
15 | - 启用一到多个内建命令。
|
16 |
|
17 | - 直接调用与禁用的内建命令同名且在`$PATH`路径下找到的外部命令。
|
18 |
|
19 | - 打印所有内建命令,无论是否禁用。
|
20 | - 打印处于启用状态的内建命令。
|
21 | - 打印处于禁用状态的内建命令。
|
22 |
|
23 | - 打印处于启用状态的posix标准内建命令。
|
24 | - 打印处于禁用状态的posix标准内建命令。
|
25 | - 打印posix标准内建命令,无论是否禁用。
|
26 |
|
27 | - 从动态库中加载内建命令。
|
28 | - 移除从动态库中加载的内建命令。
|
29 |
|
30 | #### 选项
|
31 |
|
32 |
|
33 | ```shell
|
34 | -a 打印所有内建命令,无论是否禁用。
|
35 | -d 移除从动态库中加载的内建命令。
|
36 | -n 禁用内建命令或显示已禁用的内建命令。
|
37 | -p 以可复用格式打印。
|
38 | -s 只显示处于启动状态的posix标准内建命令。
|
39 | -f 动态库中加载内建命令。
|
40 | -ns 打印处于禁用状态的posix标准内建命令。
|
41 | -as 打印posix标准内建命令,无论是否禁用。
|
42 | ```
|
43 |
|
44 | #### 参数
|
45 |
|
46 | filename:动态库文件名。
|
47 |
|
48 | name(可选):内建命令,可以为多个。
|
49 |
|
50 | #### 返回值
|
51 |
|
52 | enable返回成功,除非name不是内建命令或有错误发生。
|
53 |
|
54 | ### 例子(以下内容限于篇幅不再列出返回值部分)
|
55 |
|
56 | ```shell
|
57 | # posix special builtin
|
58 | # 假设没有任何内建命令被禁用
|
59 | # 禁用两个posix标准内建命令
|
60 | enable -n set source
|
61 | # 打印处于禁用状态的posix标准内建命令
|
62 | enable -ns
|
63 | # 打印posix标准内建命令,无论是否禁用。
|
64 | enable -as
|
65 | # 打印处于启用状态的posix标准内建命令
|
66 | enable -s
|
67 | ```
|
68 |
|
69 | ```shell
|
70 | # 假设没有任何内建命令被禁用
|
71 | # 禁用一到多个内建命令
|
72 | enable -n echo pwd
|
73 | # 打印所有内建命令,无论是否禁用。
|
74 | enable -a
|
75 | # 打印处于启用状态的内建命令
|
76 | enable
|
77 | # 打印处于禁用状态的内建命令
|
78 | enable -n
|
79 | # 启用一到多个内建命令
|
80 | enable pwd
|
81 | ```
|
82 |
|
83 | ### Q&A
|
84 |
|
85 | Q:请问`-f`,`-d`,`-p`的演示呢?
|
86 |
|
87 | A:说明一下,`-f`与`-d`限于个人能力没有找到合适的例子,如果您有更好的例子欢迎提pr;
|
88 | 经过我验证`-p`选项是否使用好像没有区别,可以比较```enable -p|cat -A```和```enable|cat -A``` 有什么区别。(注:`cat -A`用于显示不可见字符)
|
89 |
|
90 | Q:是否可以禁用`enable`自己?之后还能禁用或启用内建命令吗?
|
91 |
|
92 | A:可以;不能。
|
93 |
|
94 | ### 注意
|
95 |
|
96 | > linux shell命令执行时,shell总是先在自己的shell builtin中查找该命令,如果找到则执行该命令;如果找不到该命令,则会从环境变量`$PATH`指定的路径中依次去查找待执行的命令。看起来好像没有办法编写用户自己的命令来替代shell builtin命令。幸运的是,有了`enable`命令我们就能做到了。
|
97 |
|
98 | 1. 关于同名命令调用的优先级的知识,请先参考`builtin`命令的*提示*部分,然后继续阅读下面部分;
|
99 |
|
100 | 当内建命令`echo`没有禁用时,如果要调用外部命令`echo`,只能这样写`/usr/bin/echo`;
|
101 |
|
102 | 当我们禁用了`echo`后,优先级顺序变成了这样:
|
103 |
|
104 | 函数 > 外部命令
|
105 |
|
106 | 如果执行命令的环境没有`echo`函数,那么调用的`echo`就是外部命令。
|
107 |
|
108 | 2. 该命令是bash内建命令,相关的帮助信息请查看 `help` 命令。
|
109 |
|
110 |
|
111 |
|
\ | No newline at end of file |