<HTML>
<HEAD>
<META http-equiv="content-type" content="text/html; charset=gb2312">
<META name="man2html Chinese version">
<TITLE>Manpage of BASH</TITLE>
</HEAD>
<BODY>
<H1>BASH</H1>
Section: User Commands (1)<BR>Updated: 2002 July 15<BR><A HREF="#index">Index</A>
<A HREF="http://localhost/cgi-bin/man/man2html">Return to Main Contents</A><HR>
<A NAME="lbAB"> </A>
<H2>NAME</H2>
bash - GNU Bourne-Again SHell (GNU~Shell~Bourne二世)
<A NAME="lbAC"> </A>
<H2>概述(SYNOPSIS)</H2>
<B>bash</B>
[options]
[file]
<A NAME="lbAD"> </A>
<H2>版权所有(COPYRIGHT)</H2>
Bash is Copyright (C) 1989-2002 by the Free Software Foundation, Inc.
<A NAME="lbAE"> </A>
<H2>描述(DESCRIPTION)</H2>
<B>Bash</B>
是一个与 <I>sh</I> 兼容的命令语言解释器,可以执行从标准输入或者文件中读取的命令。
<B>Bash</B>
也整合了 <I>Korn</I> 和 <I>C</I> <I>Shell</I> (<B>ksh</B> 和 <B>csh</B>) 中的优秀特性。
<P>
<B>Bash</B>
的目标是成为遵循 IEEE POSIX Shell and Tools specification (IEEE Working Group 1003.2)
的实现。
<A NAME="lbAF"> </A>
<H2>选项(OPTIONS)</H2>
除了在 <B>set</B> 内建命令的文档中讲述的单字符选项 (option) 之外,<B>bash</B> 在启动时也解释下列选项。
<P>
<DL COMPACT>
<DT><B>-c</B><I> string</I>
<DD>
如果有
<B>-c</B>
选项,那么命令将从
<I>string</I>
中读取。如果
<I>string</I>
后面有参数 (argument),它们将用于给位置参数 (positional parameter,以
<B>$0</B>
起始) 赋值。
<DT><B>-i</B>
<DD>
如果有
<B>-i</B>
选项,shell 将交互地执行 (
<I>interactive</I>
)。
<DT><B>-l</B>
<DD>
选项使得
<B>bash</B>
以类似登录 shell (login shell) 的方式启动 (参见下面的
<FONT SIZE="-1"><B>启动(INVOCATION)</B>
</FONT>
章节)。
<DT><B>-r</B>
<DD>
如果有
<B>-r</B>
选项,shell 成为受限的 (
<I>restricted</I>
) (参见下面的
<FONT SIZE="-1"><B>受限的shell(RESTRICTED SHELL)</B>
</FONT>
章节)。
<DT><B>-s</B>
<DD>
如果有
<B>-s</B>
选项,或者如果选项处理完以后,没有参数剩余,那么命令将从标准输入读取。
这个选项允许在启动一个交互的 shell 时可以设置位置参数。
<DT><B>-D</B>
<DD>
向标准输出打印一个以 <B>$</B> 为前导的,以双引号引用的字符串列表。
这是在当前语言环境不是 <B>C</B> 或 <B>POSIX</B> 时,脚本中需要翻译的字符串(?)。
这个选项包含了 <B>-n</B> 选项;不会执行命令。
<DT><B>[-+]O [</B><I>shopt_option</I>]
<DD>
<I>shopt_option</I> 是一个
<B>shopt</B> 内建命令可接受的选项 (参见下面的
<FONT SIZE="-1"><B>shell 内建命令(SHELL BUILTIN COMMANDS)</B>
</FONT>
章节)。
如果有 <I>shopt_option</I>,<B>-O</B> 将设置那个选项的取值;
<B>+O</B> 取消它。
如果没有给出 <I>shopt_option</I>,<B>shopt</B> 可接受的选项的名称和值将打印在标准输出上。
如果启动选项是 <B>+O</B>,输出将显示为一种可以重新用作输入的格式。
<DT><B>--</B>
<DD>
<B>--</B>
通知选项的结束,禁止其余的选项处理。任何
<B>--</B>
之后的参数将作为文件名和参数对待。这相当指定了一个字符是
<B>-</B>
的参数(?)。
</DL>
<P>
<B>Bash</B>
也解释一些多字节的选项。在命令行中,这些选项必须置于需要被识别的单字符参数之前。
<P>
<DL COMPACT>
<DT><B>--dump-po-strings</B>
<DD>
等价于 <B>-D</B>,但是输出是 GNU <I>gettext</I>
<B>po</B> (可移植对象) 文件格式
<DT><B>--dump-strings</B>
<DD>
等价于 <B>-D</B>
<DT><B>--help</B>
<DD>
在标准输出显示用法信息并成功退出
<DT><B>--init-file</B> <I>file</I><DD>
<DT><B>--rcfile</B> <I>file</I><DD>
如果 shell 是交互的,执行
<I>file</I>
中的命令,而不是标准的个人初始化文件
<I>~/.bashrc</I>
(参见下面的
<FONT SIZE="-1"><B>启动(INVOCATION)</B>
</FONT>
章节)
<DT><B>--login</B>
<DD>
等价于 <B>-l</B>
<DT><B>--noediting</B>
<DD>
如果 shell 是交互的,不使用 GNU
<B>readline</B>
库来读命令行
<DT><B>--noprofile</B>
<DD>
不读取系统范围的启动文件
<I>/etc/profile</I>
或者任何个人初始化文件
<I>~/.bash_profile</I>,
<I>~/.bash_login</I>,
或
<I>~/.profile</I>
。默认情况下,
<B>bash</B>
在作为登录 shell 启动时读取这些文件 (参见下面的
<FONT SIZE="-1"><B>启动(INVOCATION)</B>
</FONT>
章节)
<DT><B>--norc</B>
<DD>
如果 shell 是交互的,不读取/执行个人初始化文件
<I>~/.bashrc</I>
这个选项在 shell 以
<B>sh</B>
命令启动时是默认打开的
<DT><B>--posix</B>
<DD>
如果默认操作与 POSIX 1003.2 标准不同的话,改变 <B>bash</B> 的行为来符合标准 (<I>posix mode</I>)
<DT><B>--restricted</B>
<DD>
shell 成为受限的 (参见下面的
<FONT SIZE="-1"><B>受限的shell(RESTRICTED SHELL)</B>
</FONT>
章节)
<DT><B>--rpm-requires</B>
<DD>
产生一个为使脚本运行,需要的文件的列表。
这个选项包含了 <B>-n</B> 选项。
它是为了避免当编译期错误检测进行时的限制--
Backticks, [] tests, 还有 evals 不会被解释,一些依赖关系可能丢失
<DT><B>--verbose</B>
<DD>
等价于 <B>-v</B>
<DT><B>--version</B>
<DD>
在标准输出显示此
<B>bash</B>
的版本信息并成功退出。
</DL>
<A NAME="lbAG"> </A>
<H2>参数(ARGUMENTS)</H2>
如果选项处理之后仍有参数剩余,并且没有指定
<B>-c</B>
或
<B>-s</B>
选项,第一个参数将假定为一个包含 shell 命令的文件的名字。
如果
<B>bash</B>
是以这种方式启动的,
<B>$0</B>
将设置为这个文件的名字,位置参数将设置为剩余其他的参数。
<B>Bash</B>
从这个文件中读取并执行命令,然后退出。
<B>Bash</B> 的退出状态是脚本中执行的最后一个命令的退出状态。
如果没有执行命令,退出状态是0。
尝试的步骤是先试图打开在当前目录中的这个文件,接下来,
如果没有找到,shell 将搜索脚本的
<FONT SIZE="-1"><B>PATH</B>
</FONT>
环境变量中的路径。
<A NAME="lbAH"> </A>
<H2>启动(INVOCATION)</H2>
<I>login shell</I> 登录 shell,是一个参数零的第一个字符是
<B>-</B>
,或者启动时指定了
<B>--login</B>
选项的 shell。
<P>
<I>interactive</I> 交互的 shell,是一个启动时没有指定非选项的参数,并且没有指定
<B>-c</B>
选项,标准输出和标准输入都连接到了终端 (在
<I><A HREF="http://localhost/cgi-bin/man/man2html?3+isatty">isatty</A></I>(3)
中判定) 的shell,或者启动时指定了
<B>-i</B>
选项的 shell。如果
<B>bash</B>
是交互的,
<FONT SIZE="-1"><B>PS1</B>
</FONT>
环境变量将被设置,并且
<B>$-</B>
包含
<B>i</B>
,允许一个 shell 脚本或者一个启动文件来检测这一状态。
<P>
下列段落描述了
<B>bash</B>
如何执行它的启动文件。如果这些启动文件中的任一个存在但是不可读取,
<B>bash</B>
将报告一个错误。文件名中的波浪号 (~,tilde) 将像
<FONT SIZE="-1"><B>EXPANSION</B>
</FONT>
章节中
<B>Tilde Expansion</B>
段描述的那样展开。
<P>
当
<B>bash</B>
是作为交互的登录 shell 启动的,或者是一个非交互的 shell 但是指定了 <B>--login</B> 选项,
它首先读取并执行 <I>/etc/profile</I> 中的命令,只要那个文件存在。
读取那个文件之后,它以如下的顺序查找 <I>~/.bash_profile</I>,
<I>~/.bash_login</I>, 和 <I>~/.profile</I>, 从存在并且可读的第一个文件中读取并执行其中的命令。
<B>--noprofile</B>
选项可以用来在 shell 启动时阻止它这样做。
<P>
当一个登录 shell 退出时,
<B>bash</B>
读取并执行文件 <I>~/.bash_logout</I> 中的命令,只要它存在。
<P>
当一个交互的 shell 但不是登录 shell 启动时,
<B>bash</B>
从文件 <I>~/.bashrc</I> 中读取并执行命令,只要它存在。可以用
<B>--norc</B>
选项来阻止它这样做。
<B>--rcfile</B> <I>file</I> 选项将强制
<B>bash</B>
读取并执行文件 <I>file</I> 中的命令,而不是 <I>~/.bashrc</I> 中的。
<P>
当
<B>bash</B>
以非交互的方式启动时,例如在运行一个 shell 脚本时,它在环境中查找变量
<FONT SIZE="-1"><B>BASH_ENV</B>
</FONT>
,如果它存在则将它的值展开,使用展开的值作为一个文件的名称,读取并执行。
<B>Bash</B>
运作的过程就如同执行了下列命令:
<P>
<DL COMPACT><DT><DD>
if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
</DL>
<P>
但是没有使用
<FONT SIZE="-1"><B>PATH</B>
</FONT>
变量的值来搜索那个文件名。
<P>
如果
<B>bash</B>
以名称
<B>sh</B>
启动,它试图模仿 (mimic)
<B>sh</B>
历史版本的启动过程,尽可能地相似,同时也遵循 POSIX 标准。
<P>
When invoked as an interactive login shell, or a non-interactive
shell with the <B>--login</B> option, it first attempts to
read and execute commands from
<I>/etc/profile</I>
and
<I>~/.profile</I>,
in that order.
The
<B>--noprofile</B>
option may be used to inhibit this behavior.
When invoked as an interactive shell with the name
<B>sh</B>,
<B>bash</B>
looks for the variable
<FONT SIZE="-1"><B>ENV</B>,
</FONT>
expands its value if it is defined, and uses the
expanded value as the name of a file to read and execute.
Since a shell invoked as
<B>sh</B>
does not attempt to read and execute commands from any other startup
files, the
<B>--rcfile</B>
op