受限的shell(RESTRICTED SHELL)

如果 bashrbash 名称启动,或者启动时使用了 -r 选项,那么它成为受限的 shell。 受限的 shell 一般用来建立一个比标准的 shell 受到更多控制的环境。 它的行为与 bash 一致,除了下列行为是不允许的 (disallowed) 或不会运行的 (not performed)。

使用 cd 来改变路径;

设置或取消 SHELL, PATH, ENV, 或 BASH_ENV 变量的值;

指定的命令名中包含 /

指定包含 / 的文件名作为传递给内建命令 . 的参数;

指定包含斜杠 (slash) 的文件名作为 -p 选项的参数,传递给 hash 内建命令;

启动时从 shell 环境中导入 (import) 函数定义;

启动时解释 shell 环境中 SHELLOPTS 的值;

使用 >, >|, <>, >&, &>, 和 >> 等重定向操作符重定向输出;

使用 exec 内建命令来以另一个命令替换 shell;

使用 enable 内建命令的 -f-d 选项来增加和删除内建命令;

使用 enable 内建命令来允许和禁止 shell 内建命令;

指定 command 内建命令的 -p 选项;

使用 set +rset +o restricted 来关闭受限模式。

这些限制在所有启动文件读取之后才会生效。

当一个 shell 脚本作为一个命令执行时 (参见上面的 命令执行(COMMAND EXECUTION) 章节), rbash 关闭为执行脚本而孵化 (spawn) 的 shell 的所有限制。