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

9.6 KiB
Raw Permalink Blame History

名称NAME

bash - GNU Bourne-Again SHellGNU Bourne二世shell

概要SYNOPSIS

bash [options] [file]

版权所有COPYRIGHT

bashFree Software Foundation, Inc版权所有1989-2005

描述DESCRIPTION

bash是与sh兼容的命令语言解释器,可以执行从标准输入或者文件中读取的命令。 bash也整合了KornC Shellkshcsh)中的有用的特性。

bash的目标是成为遵循IEEE POSIX Shell和工具规范(IEEE规范1003.1)的实现。 bash可以配置成默认和POSIX一致。

选项OPTIONS

除了在set内建命令的文档中讲述的单字符选项之外,bash在启动时还解释下列选项:

  • -c string
    如果有-c选项,那么命令将从string中读取。如果string后面有参数,它们会赋值给位置参数 (以$0起始) 。
  • -i
    如果有-i选项,shell则交互式(interactive)执行。
  • -l
    使得bash以登录shelllogin shell)的方式启动 (参见下面的【启动】一节)。
  • -r
    如果有-r选项,shell成为受限的(restricted)(参见下面的【受限的shell】一节)。
  • -s
    如果有-s选项,或者如果选项处理完以后没有参数剩余,那么从标准输入读取命令。 这个选项允许,在启动交互式shell时设置位置参数。
  • -D
    向标准输出打印一个以$为前导的,以双引号引用的字符串列表。 这是在当前语言环境不是CPOSIX时,脚本中需要翻译的字符串。 这个选项隐含了-n选项,不会执行命令。
  • [-+]O [shopt_option]
    shopt_option是一个shopt内建命令可接受的选项 (参见下面的【[shell内建命令](buildin-command.md#shell内建命令SHELL BUILTIN COMMANDS)】一节)。 如果有shopt_option-O将设置那个选项的取值;+O取消它。 如果没有给出shopt_optionshopt将在标准输出上打印设为允许的选项的名称和值。 如果启动选项是+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这个选项在shellsh命令启动时是默认启用的
  • --posix
    如果默认操作与POSIX 1003.2标准不同的话,改变bash的行为来符合标准(posix模式)
  • --restricted
    shell成为受限的(参见下面的【受限的shell】一节)
  • --verbose
    等价于-v
  • --version
    在标准输出显示此bash的版本信息并成功退出。

参数ARGUMENTS

如果选项处理之后仍有参数剩余,并且没有指定-c-s选项,第一个参数将假定为一个包含shell命令的文件的名字。 如果bash是以这种方式启动的,$0将设置为这个文件的名字,位置参数将设置为剩余的其他参数。 Bash从这个文件中读取并执行命令,然后退出。 Bash的退出状态是脚本中执行的最后一个命令的退出状态。 如果没有执行命令,退出状态是0。 尝试的步骤是先试图打开在当前目录中的这个文件,接下来,如果没有找到,shellPATH环境变量中的目录中搜索脚本。

启动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运作的过程就如同执行了下列命令:

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模式。

bashposix模式启动时,(和使用--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(元字符)
    一个字符, 如果不是引用的话, 将成为词的分隔符. 它是如下字符之一:
\ | & ; ( ) < > space tab
  • control operator(控制操作符)
    一个 token(标识), 拥有控制功能. 它是如下符号之一:
|| & && ; ;; ( ) | <newline>

保留字RESERVED WORDS

保留字 是对shell有特殊意义的词。

如果

  • 不是在引用中
  • 并且
  • 简单命令的起始词或(参见下面【shell语法】一节),或是casefor命令第三个单词

下列词被识别为保留的:

! case do done elif else esac fi for function if in select then until while { } time [[ ]]