UNPKG

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