-
Bash 能够以交互式或非交互式模式启动。Bash 的交互模式是一个很多人都熟悉的典型的终端/命令行界面。GNOME 终端 默认以交互模式打开 Bash。Bash 在非交互模式下运行的例子是,当命令和数据从文件或 shell 脚本通过 管道 传送到 Bash 时。其它 Bash 可以运行的模式包括:
登录(login)、非登录(non-login)、远程(remote)、POSIX、Unix sh、受限(restricted)
,以及使用与用户不同的 UID/GID 模式。各种模式是可以相互组合的。比如,交互式 + 受限 + POSIX 或者非交互式 + 非登录 + 远程
。不同的启动模式,决定着 Bash 所读取的启动文件。理解这些操作模式,有助于帮助我们修改启动文件。 -
当用户开启终端模拟器进入命令行环境时,便启动了一次交互式 shell 会话。GNOME 终端默认以非登录模式为用户打开 Shell。你可以在
“编辑 → 首选项 → 配置文件 → 命令(Edit → Preferences → Profilles → Command)”
中配置 GNOME 终端以何种模式(登录与非登录式)启动。也可以在 Bash 启动时通过向其传递 -login 标志来要求进入登录模式。要注意一点,Bash 的登录模式与非交互模式并不互斥。可以让 Bash 同时以登录模式和非交互模式运行。 -
除非传入
-noprofile
选项,否则登录模式的 Bash shell 会默认读取并执行某些初始化文件中命令。如果/etc/profile
存在,它会是第一个被执行的文件,紧接着是按~/.bash_profile、~/.bash_login 或 ~/.profile
顺序找到的第一个文件。当用户退出登录模式的 shell 时,或者有脚本在非交互式登录模式的 shell 中调用了内置 exit命令,Bash 会读取并执行~/.bash_logout
中的命令,如果/etc/bash_logout
存在的话,会紧接着执行它。通常来说,/etc/profile
会援引(source) /etc/bashrc
文件,读取并执行其中的命令,然后查找并读取执行/etc/profile.d
目录中以 .sh 结尾的文件。同样的,~/.bash_profile
通常也会援引(source) ~/.bashrc
文件。/etc/bashrc
和~/.bashrc
都会进行检查,避免重复援引(source)。
Bash 最广为人知的用户点文件是 ~/.bashrc。通过编辑该文件,可以设置大多数个性化选项。由于我们常常需要设置一些选项,会改动上面提及甚至没有提及的文件,所以大部分自定义选项会成为一个麻烦事。Bash 环境具有很高的可定制性,正是为了适应不同用户的不同需求。
当登录 shell 正常退出时,如果 ~/.bash_logout 和 /etc/bash_logout 存在,它们会被调用。下一幅图展示了 Bash 作为交互式 shell 启动时的过程。例如,当用户从桌面环境打开终端模拟器时,会按照以下顺序进行。
网友评论