Files
translations/bash-3-man/overview.md
2014-09-17 22:41:50 +08:00

188 lines
9.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
名称NAME
=======================
`bash` - `GNU Bourne-Again SHell``GNU` `Bourne`二世`shell`
概要SYNOPSIS
=======================
```bash
bash [options] [file]
```
版权所有COPYRIGHT
=======================
`bash``Free Software Foundation, Inc`版权所有`1989-2005`
描述DESCRIPTION
=======================
`bash`是与`sh`兼容的命令语言解释器,可以执行从标准输入或者文件中读取的命令。
`bash`也整合了`Korn``C` `Shell``ksh``csh`)中的有用的特性。
`bash`的目标是成为遵循`IEEE` `POSIX` `Shell`和工具规范(`IEEE`规范`1003.1`)的实现。
`bash`可以配置成默认和`POSIX`一致。
选项OPTIONS
=======================
除了在`set`内建命令的文档中讲述的单字符选项之外,`bash`在启动时还解释下列选项:
- `-c string`
如果有`-c`选项,那么命令将从`string`中读取。如果`string`后面有参数,它们会赋值给位置参数 (以`$0`起始) 。
- `-i`
如果有`-i`选项,`shell`则交互式(`interactive`)执行。
- `-l`
使得`bash`以登录`shell``login shell`)的方式启动
(参见下面的[【启动】](overview.md#启动INVOCATION)一节)。
- `-r`
如果有`-r`选项,`shell`成为受限的(`restricted`)(参见下面的【受限的`shell`】一节)。
- `-s`
如果有`-s`选项,或者如果选项处理完以后没有参数剩余,那么从标准输入读取命令。
这个选项允许,在启动交互式`shell`时设置位置参数。
- `-D`
向标准输出打印一个以`$`为前导的,以双引号引用的字符串列表。
这是在当前语言环境不是`C``POSIX`时,脚本中需要翻译的字符串。
这个选项隐含了`-n`选项,不会执行命令。
- `[-+]O [shopt_option]`
`shopt_option`是一个`shopt`内建命令可接受的选项 (参见下面的【[`shell`内建命令](buildin-command.md#shell内建命令SHELL BUILTIN COMMANDS)】一节)。
如果有`shopt_option``-O`将设置那个选项的取值;`+O`取消它。
如果没有给出`shopt_option``shopt`将在标准输出上打印设为允许的选项的名称和值。
如果启动选项是`+O`,输出将以一种可以重用为输入的格式显示。
- `--`
`--`标志选项的结束,不再处理后续选项。
任何`--`之后的参数将作为文件名和参数对待。参数`-`与此选项等价。
`bash`也解释一些多字符的选项。这些选项必须置于需要被识别的单字符参数之前才能识别。
- `--debugger`
设置`debugger`配置文件,在`shell`启动前会执行这个文件。
- `--dump-po-strings`
等价于`-D`,但是输出是可移植对象(`GNU gettext po`)文件格式
- `--dump-strings`
等价于`-D`
- `--help`
在标准输出显示用法信息并成功退出
- `--init-file file`
`--rcfile file`
如果`shell`是交互的,执行`file`中的命令,而不是标准的个人初始化文件`~/.bashrc`(参见下面的【启动】一节)
- `--login`
等价于`-l`
- `--noediting`
如果`shell`是交互的,不使用`GNU readline`库来读命令行
- `--noprofile`
不读取系统范围的启动文件`/etc/profile`或者任何个人初始化文件`~/.bash_profile``~/.bash_login``~/.profile`
默认情况下,`bash`在作为登录`shell`启动时读取这些文件(参见下面的【启动】一节)
- `--norc`
如果`shell`是交互的,不读取/执行个人初始化文件`~/.bashrc`这个选项在`shell``sh`命令启动时是默认启用的
- `--posix`
如果默认操作与`POSIX 1003.2`标准不同的话,改变`bash`的行为来符合标准(`posix`模式)
- `--restricted`
`shell`成为受限的(参见下面的【受限的`shell`】一节)
- `--verbose`
等价于`-v`
- `--version`
在标准输出显示此`bash`的版本信息并成功退出。
参数ARGUMENTS
=======================
如果选项处理之后仍有参数剩余,并且没有指定`-c``-s`选项,第一个参数将假定为一个包含`shell`命令的文件的名字。
如果`bash`是以这种方式启动的,`$0`将设置为这个文件的名字,位置参数将设置为剩余的其他参数。
`Bash`从这个文件中读取并执行命令,然后退出。
`Bash`的退出状态是脚本中执行的最后一个命令的退出状态。
如果没有执行命令,退出状态是`0`
尝试的步骤是先试图打开在当前目录中的这个文件,接下来,如果没有找到,`shell``PATH`环境变量中的目录中搜索脚本。
启动INVOCATION
=======================
**登录`shell`** 是一个参数零是`-``shell`,或者启动时指定了`--login`选项的`shell`
**交互式`shell`** 是一个启动时没有指定非选项的参数,并且没有指定`-c`选项,标准输出和标准输入都连接到了终端 (在 isatty(3) 中判定) 的`shell`,或者启动时指定了`-i`选项的`shell`
如果`bash`是交互的,`PS1`环境变量将被设置,并且`$-`包含`i` ,允许一个`shell`脚本或者一个启动文件来检测这一状态。
下列段落描述了`bash`如何执行它的启动文件。
如果这些启动文件中的任一个存在但是不可读取,`bash`将报告一个错误。
文件名中的波浪号`~`(tilde) 将像【扩展】一节中`Tilde Expansion`段描述的那样展开。
`bash`是作为交互的登录`shell`启动的,或者是一个非交互的`shell`但是指定了`--login`选项,它首先读取并执行`/etc/profile`中的命令,只要那个文件存在。
读取那个文件之后,它以如下的顺序查找`~/.bash_profile``~/.bash_login``~/.profile`,从存在并且可读的第一个文件中读取并执行其中的命令。
`--noprofile`选项可以用来在`shell`启动时阻止它这样做。
当一个登录`shell`退出时,`bash`读取并执行文件`~/.bash_logout`中的命令,只要它存在。
当一个交互的`shell`但不是登录`shell`启动时,`bash`从文件`~/.bashrc`中读取并执行命令,只要它存在。
可以用`--norc`选项来阻止它这样做。
`--rcfile file`选项将强制`bash`读取并执行文件`file`中的命令,而不是`~/.bashrc`中的。
`bash`以非交互的方式启动时,例如在运行一个`shell`脚本时,它在环境中查找变量`BASH_ENV`,如果它存在则将它的值展开,使用展开的值作为一个文件的名称,读取并执行。
`bash`运作的过程就如同执行了下列命令:
```bash
if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
```
但是没有使用`PATH`变量的值来搜索那个文件名。
如果`bash`以名称`sh`启动,它试图模仿`sh`历史版本的启动过程,尽可能地相似,同时也遵循`POSIX`标准。
当作为交互式登录`shell`启动时,或者是非交互但使用了`--login`选项启动的时候,
它首先尝试读取并执行文件`/etc/profile``~/.profile`中的命令。
选项`--noprofile`用于避免这种行为.当使用命令`sh`来启动一个交互式的`shell`时,`bash`查找环境变量`ENV`,如果有定义的话就扩展它的值,然后使用扩展后的值作为要读取和执行的文件的名称。
由于使用`sh`启动的`shell`不会读取和执行任何其他的启动文件,选项`--rcfile`没有意义。
使用名称`sh`启动的非交互的`shell`不会读取任何其他启动文件。
当以`sh`启动时,`bash`在读取启动文件之后进入`posix`模式。
`bash``posix`模式启动时,(和使用`--posix`命令行参数效果相同),它遵循`POSIX`标准。
这种模式下,交互式`shell`扩展`ENV`环境变量的值,读取并执行以扩展后值为文件名的配置文件,不会读取其他文件。
`bash`试着检测它是不是由远程`shell`守护程序,通常为`rshd`启动的。
如果`bash`发现它是由`rshd`启动的,它将读取并执行`~/.bashrc`文件中的命令,只要这个文件存在并且可读。
如果以`sh`命令启动,它不会这样做。
选项`--norc`可以用来阻止这种行为,选项`--rcfile`用来强制读取另一个文件,但是通常`rshd`不会允许它们,或者用它们来启动`shell`
如果`shell`是以与真实用户(组)`id`不同的有效用户(组)`id`来启动的,并且没有`-`选项,那么它不会读取启动文件,也不会从环境中继承`shell`函数。
环境变量中如果出现`SHELLOPTS`,它将被忽略。
有效用户`id`将设置为真实用户`id`
如果启动时给出了`-`选项,那么启动时的行为是类似的,但是不会重置有效用户`id`
定义DEFINITIONS
=======================
下列定义在文档余下部分中通用.
- `blank`(空白)
一个空格或是`tab`
- `word`(词)
一个字符序列,`shell`将它们视为一个结构单元. 也称为一个`token`
- `name` (名称)
一个只由字母,数字和下划线构成的词,并且以字符或下划线起始. 也称为一个 word identifier标识符.
- `metacharacter`(元字符)
一个字符, 如果不是引用的话, 将成为词的分隔符. 它是如下字符之一:
```bash
\ | & ; ( ) < > space tab
```
- `control operator`(控制操作符)
一个 token(标识), 拥有控制功能. 它是如下符号之一:
```bash
|| & && ; ;; ( ) | <newline>
```
保留字RESERVED WORDS
=======================
**保留字** 是对`shell`有特殊意义的词。
如果
- 不是在引用中
- 并且
- 简单命令的起始词或(参见下面【`shell`语法】一节),或是`case``for`命令第三个单词
下列词被识别为保留的:
```bash
! case do done elif else esac fi for function if in select then until while { } time [[ ]]
```