Linux Shell 从交互式和登录式来看可划分为不同的类别。
交互式 Shell 是指在终端命令行上执行,以提示符的方式在终端等待用户输入,并实时运行用户输入的命令的模式;即与用户交互的模式。
交互登录式 Shell 是需要用户名和密码登录后进入的 Shell(比如终端下登录远程服务器)或者通过 -login
选项在终端启动的 Shell 。
exit
或 logout
命令退出 Shell▲ 登录交互登录式 Shell 时
/etc/profile
启动文件/etc/profile
文件是 Bash Shell 默认的主启动文件,不同 Linux 发行版其内容不尽相同然后按照顺序读取第一个被找到的启动文件($HOME/.bashrc
文件不在其中是因为该文件通常通过以下文件运行):
$HOME/.bash_profile
$HOME/.bash_login
$HOME/.profile
▲ 登出交互登录式 Shell 时
$HOME/.bash_logout
文件/etc/bash.bash_logout
文件(该文件并不是所有 Linux 发行版都有,比如 Manjaro 20.0 有但 Ubuntu 20.04 则没有)【注】如果将一些设定的系统全局环境变量存放在 /etc/profile
文件中,那么当所用 Linux 发行版升级时,该文件也会跟着升级,则所定制的所有变量设置就都被覆盖了。
/etc/profile.d
目录下新建的一个以 .sh
结尾的文件中(而不是直接修改 /etc/profile
文件)。$HOME/.bashrc
文件中。交互非登录式 Shell 是指不需要用户名和密码也不指定 -login
选项即可打开的 Shell(比如直接在终端运行 bash
打开一个 Bash Shell;或者在 Linux 系统桌面上打开一个终端 terminal 窗口程序)。
exit
退出 Shell▲ 启动交互非登录式 Shell 时
$HOME/.bashrc
文件(而不会读取 /etc/profile
文件。这也是为什么修改 /etc/profile
文件后,如果未重新登录系统,则新打开的交互非登录式 Shell 下并未产生影响的)非交互式 Shell 是指以 Shell 脚本形式执行。在这种模式下,Shell 不与用户进行交互,而是读取存放在 Shell 脚本文件中的命令并执行,当读取到脚本文件结尾 EOF 时,Shell 终止。
▲ 启动非交互式 Shell 时
BASH_ENV
环境变量用于指定启动非交互式 Shell 时需要启动的文件(大多数 Linux 发行版没有设定该环境变量) 【注】如果 BASH_ENV
环境变量没有设定,也不意味着非交互式 Shell 就无法使用任何系统全局变量。因为非交互式 Shell 一般作为交互式 Shell 的孩子 Shell(不是子 Shell,详情参见 LinuxShell父子关系概述)启动,故会继承父 Shell 的全部全局环境变量;或者直接在交互式 Shell 下执行,故也可以直接使用当前 Shell 的所有环境变量。
Linux 下执行 Shell 脚本文件有两种方式,以下以 Bash Shell 为例:
source script
或 . script
以这种方式执行脚本文件不会创建孩子 Shell(child shell),直接在当前 Shell 执行脚本文件中的命令。bash script
或 ./script
以这种方式执行脚本文件会创建孩子 Shell(child shell),并在孩子 Shell 中执行脚本文件。扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有