6.1 Bash 调用(Invoking Bash)

bash [long-opt] [-ir] [-abefhkmnptuvxdBCDHP] [-o option] [-O shopt_option] [argument ...]

bash [long-opt] [-abefhkmnptuvxdBCDHP] [-o option] [-O shopt_option] -c command_string [argument …]

bash [long-opt] -s [-abefhkmnptuvxdBCDHP] [-o option] [-O shopt_option] [argument …]

所有在内建命令 set(参见 4.3.1《内建命令 set》)中使用的单字符选项都可以作为 shell 调用时使用的选项。这里还有一些多字符选项可以使用。这些选项必须在单字符选项之前出现在命令行中才会被识别。

多字符选项说明
—debugger在 shell 启动之前安排执行 debugger 配置文件。开启扩展的调试模式(参见 4.3.2《内建命令 shopt》关于对 shopt 的“extdebug”选项的描述)。
—dump-po-strings以 GNU gettext PO(便携对象)文件格式,在标准输出中打印所有以“$”开头的双引号字符串列表。其等同于去除了输出格式的“-D”选项。
—dump-strings等同于“-D”选项。
—help在标准输出中显示帮助信息并成功退出。
—init-file filename
—rcfile filename
在交互式 shell 中从“filename”中执行命令(代替从“~/.bashrc”中执行)。
—login等同于“-l”选项。
—noediting当 shell 处于交互模式时,不使用 GNU Readline 库(参见第 8 章《命令行编辑》)读取命令行。
—noprofile在 Bash 作为一个登录 shell 调用时,不加载系统级启动文件“/etc/profile”或任何个人初始化文件“/.bash_profile”、“/.bash_login”或“~/.profile”。
—norc在 shell 交互模式下不读取初始化文件“~/.bashrc”。如果使用 sh 命令调用 shell,该项默认开启。
—posix将 Bash 所有的不同于 POSIX 标准的默认操作行为改变为该标准操作行为。参见 6.11《Bash POSIX 模式》关于 POSIX 的描述。
—restricted使 shell 变为受限 shell(参见 6.10《受限 shell》)。
—verbose等同于“-v”选项。打印 shell 读取的输入行。
—version在标准输出中打印该 Bash 实例的版本信息后并成功退出。

这还有一些单字符选项可在调用 Bash 时使用,但其在内建命令 set 中是不可用的。

单字符选项说明
-c从第一个非选项参数“command_string”中读取命令并执行,然后退出。如果在“command_string”后面有参数出现,则第一个参数分配给“$0”,之后的参数依次分配给位置参数。对“$0”的赋值是在设置 shell 名称,其用在警告和报错信息中。
-i强制 shell 运行于交互模式。关于交互模式,可参见 6.3《交互式 shell》。
-l使这个 shell 的动作就像由登录直接调用一样。当 shell 处于交互模式时,其等同于使用“exec -l bash”启动一个登录 shell。当 shell 处于非交互模式时,则会执行登录 shell 的启动文件。“exec bash -l”或“exec bash —login”将使用 Bash 登录 shell 来替换当前 shell。关于登录 shell 的特殊行为的描述,可参见 6.2《Bash 启动文件》。
-r使 shell 变为受限 shell(参见 6.10《受限 shell》)。
-s如果该选项出现,或如果在选项处理后没有留下参数,则从标准输入读取命令。该选项允许当调用一个交互式 shell 或通过管道读取输入时设置位置参数。
-D在标准输出中打印所有以“$”开头的双引号字符串列表。当当前区域语言不是 C 或 POSIX 时,这些字符串用于语言翻译(参见 3.1.2.5《区域语言翻译》)。该项隐含“-n”选项,不会执行任何命令。
[-+]O [shopt_option]shopt_option”是一个内建命令 shopt(参见 4.3.2《内建命令 shopt》)可接受的 shell 选项。如果“shopt_option”出现,“-O”用于设置该项,而“+O”则用于释放该项。如果没有给出“shopt_option”,则所有由 shopt 命令可接受的 shell 选项名和选项值都将会打印到标准输出中。如果调用时用的是“+O”,则打印出的格式是可重新用于输入的。
一个“—”标志着所有选项的结束并且不会对后面的选项进行处理。在“—”之后出现的所有参数都被视为文件名和参数。

一个登录 shell 参数 0 的第一个字符是“-”,或其是使用“—login”选项调用的。

交互式 shell 是不带有非选项参数(除了指定“-s”选项)并且未指定“-c”选项启动的 shell,其输入和输出都会连接到终端(由 isatty(3)确定),或带有“-i”选项启动的 shell。关于详情,可参考 6.3《交互式 shell》。

如果在处理了选项之后还有参数存在,并且命令即没有提供“-c”选项也没有提供“-s”选项的话,则认为第一个参数是包含了 shell 命令的文件的文件名(参见 3.8《Shell 脚本》)。当使用这种方式调用 Bash 时,“$0”设置为文件名,并且后面剩余的参数赋给位置参数。Bash 从该文件中读取命令并执行,然后退出。Bash 的退出状态是脚本中执行的最后一条命令的退出状态。如果没有命令执行,则退出状态为 0。