Shell 脚本 - 交互式和非交互式 Shell
shell 为我们提供了 Unix 系统的接口。在使用操作系统时,我们间接与 shell 交互。在 Linux 分发系统上,每次我们使用终端时,我们都会与 shell 交互。 shell 的工作是解释或分析用户给出的 Unix 命令。 shell 接受来自用户的命令并将它们转换为内核可以理解的形式。换句话说,它充当用户和操作系统内核单元之间的中介。
下面列出了 shell 的一些特性:
- 文件名中的通配符替换(模式匹配)
- 命令历史
- 文件名替换
- 管道
本文重点介绍交互式和非交互式 shell。
交互式外壳:
交互式 shell 被定义为简单地将命令作为用户在 tty 上的输入并将输出确认给用户的 shell。此 shell 还读取激活期间发生的启动文件并显示提示。它还默认启用作业控制。从名称上也可以看出,它是一个我们可以与之交互的外壳。交互式脚本是需要用户输入的脚本。交互式脚本无法在后台运行,因为它们需要用户输入。对于交互式 shell,提示变量必须设置为 ($PS1)。
例如,bash shell 是一个交互式 shell。
如何启动交互式shell?
登录系统后,我们可以通过提供 shell 的名称来启动交互式 shell。
例如,
bash
这将启动 bash shell。
非交互式外壳:
顾名思义,非交互式 shell 是一种不与用户交互的 shell。我们可以通过脚本或类似的方式运行它。此外,它可以通过一些自动化过程运行。在这种情况下,不会执行 .bashrc 和 .profile 文件。非交互式外壳会影响 PATH 变量。强烈建议在非交互式 shell 中使用命令的完整路径。非交互式脚本可以轻松地在后台顺利运行。这个 shell 通常是一个非登录 shell,因为调用用户已经登录。运行脚本的 shell 始终被视为非交互式 shell。
像 Init 和 startup 这样的脚本被认为是非交互式的,因为它们必须在没有人工干预的情况下运行。
如何检查正在使用哪种类型的外壳?
可以检测到正在使用的 shell 类型(仅限 BASH)。我们可以通过以下方式确定我们使用的是交互式 shell 还是非交互式 shell,
[[ $- == *i* ]] && echo ‘Interactive’ || echo ‘not-interactive’