TranslateProject/translated/tech/20190723 Getting help for Linux shell built-ins.md

221 lines
10 KiB
Markdown
Raw Normal View History

[#]: collector: (lujun9972)
2019-07-28 11:03:48 +08:00
[#]: translator: (MjSeven)
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: subject: (Getting help for Linux shell built-ins)
[#]: via: (https://www.networkworld.com/article/3410350/getting-help-for-linux-shell-built-ins.html)
[#]: author: (Sandra Henry-Stocker https://www.networkworld.com/author/Sandra-Henry_Stocker/)
2019-07-28 15:21:24 +08:00
获取有关 Linux shell 内置命令的帮助
======
2019-07-28 15:21:24 +08:00
Linux 内置命令是属于用户 shell 的一部分,本文将告诉你如何识别它们并从它们那获得帮助。
![Sandra Henry-Stocker][1]
2019-07-28 15:21:24 +08:00
Linux 内置命令是内置于 shell 中的命令,很像内置于墙中的架子。与标准 Linux 命令存储在 /usr/bin 中的方式不同,它们不会作为独立文件被你找到,你可能会使用它们中的相当一部分,但不会质疑它们与 **ls****pwd** 等命令有何不同。
2019-07-28 15:21:24 +08:00
内置命令与其他 Linux 命令一样使,它们可能比不属于 shell 的类似命令运行得快一些。Bash 内置命令包括 **alias**、**export** 和 **bg** 等。
2019-07-28 15:21:24 +08:00
**[ 两分钟 Linux 技巧: [学习如何在 2 分钟视频教程中掌握大量 Linux 命令][2] ]**
2019-07-28 15:21:24 +08:00
正如你担心的那样,因为内置命令是特定于 shell 的,所以它们不会提供手册页。使用 **man** 来查看 **bg**,你会看到这样的东西:
```
$ man bg
No manual entry for bg
```
2019-07-28 15:21:24 +08:00
判断内置命令的另一个提示是当你使用 **which** 命令来识别命令的来源时Bash 不会响应,表示没有与内置命令关联的文件:
```
$ which bg
$
```
2019-07-28 15:21:24 +08:00
如果你的 shell 是 **/bin/zsh**,另一方面,你可能会得到一个更有启发性的响应:
```
% which bg
bg: shell built-in command
```
2019-07-28 15:21:24 +08:00
bash 提供了额外的帮助,但它是通过使用 **help** 命令实现的:
```
$ help bg
bg: bg [job_spec ...]
Move jobs to the background.
Place the jobs identified by each JOB_SPEC in the background, as if they
had been started with `&'. If JOB_SPEC is not present, the shell's notion
of the current job is used.
Exit Status:
Returns success unless job control is not enabled or an error occurs.
```
2019-07-28 15:21:24 +08:00
如果你想要查看 bash 提供的所有内置命令的列表,使用 **compgen -b** 命令。通过管道将命令输出到列中,以获得较好格式的清单。
```
$ compgen -b | column
. compgen exit let return typeset
: complete export local set ulimit
[ compopt false logout shift umask
alias continue fc mapfile shopt unalias
bg declare fg popd source unset
bind dirs getopts printf suspend wait
break disown hash pushd test
builtin echo help pwd times
caller enable history read trap
cd eval jobs readarray true
command exec kill readonly type
```
2019-07-28 15:21:24 +08:00
如果你使用 **help** 命令,你将看到一个内置命令列表以及简短描述。但是,这个列表被截断了(以 **help** 命令结尾):
```
$ help
GNU bash, version 5.0.3(1)-release (x86_64-pc-linux-gnu)
These shell commands are defined internally. Type `help' to see this list.
Type `help name' to find out more about the function `name'.
Use `info bash' to find out more about the shell in general.
Use `man -k' or `info' to find out more about commands not in this list.
A star (*) next to a name means that the command is disabled.
job_spec [&] history [-c] [-d offset] [n] or histo>
(( expression )) if COMMANDS; then COMMANDS; [ elif CO>
. filename [arguments] jobs [-lnprs] [jobspec ...] or jobs ->
: kill [-s sigspec | -n signum | -sigsp>
[ arg... ] let arg [arg ...]
[[ expression ]] local [option] name[=value] ...
alias [-p] [name[=value] ... ] logout [n]
bg [job_spec ...] mapfile [-d delim] [-n count] [-O ori>
bind [-lpsvPSVX] [-m keymap] [-f filen> popd [-n] [+N | -N]
break [n] printf [-v var] format [arguments]
builtin [shell-builtin [arg ...]] pushd [-n] [+N | -N | dir]
caller [expr] pwd [-LP]
case WORD in [PATTERN [| PATTERN]...) > read [-ers] [-a array] [-d delim] [-i>
cd [-L|[-P [-e]] [-@]] [dir] readarray [-d delim] [-n count] [-O o>
command [-pVv] command [arg ...] readonly [-aAf] [name[=value] ...] or>
compgen [-abcdefgjksuv] [-o option] [-> return [n]
complete [-abcdefgjksuv] [-pr] [-DEI] > select NAME [in WORDS ... ;] do COMMA>
compopt [-o|+o option] [-DEI] [name ..> set [-abefhkmnptuvxBCHP] [-o option-n>
continue [n] shift [n]
coproc [NAME] command [redirections] shopt [-pqsu] [-o] [optname ...]
declare [-aAfFgilnrtux] [-p] [name[=va> source filename [arguments]
dirs [-clpv] [+N] [-N] suspend [-f]
disown [-h] [-ar] [jobspec ... | pid . <p&gt'> test [expr]
echo [-neE] [arg ...] time [-p] pipeline
enable [-a] [-dnps] [-f filename] [nam> times
eval [arg ...] trap [-lp] [[arg] signal_spec ...]
exec [-cl] [-a name] [command [argumen> true
exit [n] type [-afptP] name [name ...]
export [-fn] [name[=value] ...] or exp> typeset [-aAfFgilnrtux] [-p] name[=va>
false ulimit [-SHabcdefiklmnpqrstuvxPT] [li>
fc [-e ename] [-lnr] [first] [last] or> umask [-p] [-S] [mode]
fg [job_spec] unalias [-a] name [name ...]
for NAME [in WORDS ... ] ; do COMMANDS> unset [-f] [-v] [-n] [name ...]
for (( exp1; exp2; exp3 )); do COMMAND> until COMMANDS; do COMMANDS; done
function name { COMMANDS ; } or name (> variables - Names and meanings of som>
getopts optstring name [arg] wait [-fn] [id ...]
hash [-lr] [-p pathname] [-dt] [name .> while COMMANDS; do COMMANDS; done
help [-dms] [pattern ...] { COMMANDS ; }
```
2019-07-28 15:21:24 +08:00
从上面的清单中可以看出,**help** 命令本身就是内置的。
2019-07-28 15:21:24 +08:00
你可以通过向 **help** 命令提供你感兴趣的内置命令名称来获取关于它们的更多信息,例如 **help dirs**
```
$ help dirs
dirs: dirs [-clpv] [+N] [-N]
Display directory stack.
Display the list of currently remembered directories. Directories
find their way onto the list with the `pushd' command; you can get
back up through the list with the `popd' command.
Options:
-c clear the directory stack by deleting all of the elements
-l do not print tilde-prefixed versions of directories relative
to your home directory
-p print the directory stack with one entry per line
-v print the directory stack with one entry per line prefixed
with its position in the stack
Arguments:
+N Displays the Nth entry counting from the left of the list
shown by dirs when invoked without options, starting with
zero.
-N Displays the Nth entry counting from the right of the list
shown by dirs when invoked without options, starting with
zero.
Exit Status:
Returns success unless an invalid option is supplied or an error occurs.
```
2019-07-28 15:21:24 +08:00
内置命令提供了每个 shell 的大部分功能。你使用的任何 shell 都有一些内置命令,但是如何获取这些内置命令的信息可能因 shell 而异。例如,对于 **zsh**,你可以使用 **man zshbuiltins** 命令获得其内置命令的描述。
```
$ man zshbuiltins
ZSHBUILTINS(1) General Commands Manual ZSHBUILTINS(1)
NAME
zshbuiltins - zsh built-in commands
SHELL BUILTIN COMMANDS
Some shell builtin commands take options as described in individual en
tries; these are often referred to in the list below as `flags' to avoid
confusion with shell options, which may also have an effect on the behav
iour of builtin commands. In this introductory section, `option' always
has the meaning of an option to a command that should be familiar to most
command line users.
```
2019-07-28 15:21:24 +08:00
在这个冗长的手册页中,你将找到一个内置命令列表,其中包含有用的描述,如下摘录中所示:
```
bg [ job ... ]
job ... &
Put each specified job in the background, or the current job if
none is specified.
bindkey
See the section `Zle Builtins' in zshzle(1).
break [ n ]
Exit from an enclosing for, while, until, select or repeat loop.
If an arithmetic expression n is specified, then break n levels
instead of just one.
```
2019-07-28 15:21:24 +08:00
### 最后
2019-07-28 15:21:24 +08:00
Linux 内置命令对于每个 shell 都很重要,它的操作类似特定于 shell 的命令一样。如果你经常使用不同的 shell并注意到你经常使用的某些命令似乎不存在或者不能按预期工作那么它可能是你使用的其他 shell 之一中的内置命令。
2019-07-28 15:21:24 +08:00
**[ 另请参考: [Linux 疑难解答的宝贵提示和技巧][3] ]**
2019-07-28 15:21:24 +08:00
加入 [Facebook][4] 和 [Linkedln][5] 上的网络世界社区,对你最关心的话题发表评论。
--------------------------------------------------------------------------------
via: https://www.networkworld.com/article/3410350/getting-help-for-linux-shell-built-ins.html
作者:[Sandra Henry-Stocker][a]
选题:[lujun9972][b]
2019-07-28 15:21:24 +08:00
译者:[MjSeven](https://github.com/MjSeven)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://www.networkworld.com/author/Sandra-Henry_Stocker/
[b]: https://github.com/lujun9972
[1]: https://images.idgesg.net/images/article/2019/07/linux_penguin-100802549-large.jpg
[2]: https://www.youtube.com/playlist?list=PL7D2RMSmRO9J8OTpjFECi8DJiTQdd4hua
[3]: https://www.networkworld.com/article/3242170/linux/invaluable-tips-and-tricks-for-troubleshooting-linux.html
[4]: https://www.facebook.com/NetworkWorld/
[5]: https://www.linkedin.com/company/network-world