Shell的四种运行方式

我们可以直接使用Shell, 也可以输入用户名和密码后再使用Shell, 第一种叫做非登陆式, 第二种叫做登陆式.

我们可以在Shell中一个个地输入命令并及时查看它们的输出结果, 整个过程都在跟Shell不停地互动, 这叫做交互式. 我们也可以运行一个Shell脚本, 让所有命令批量化, 一次性地执行, 这叫非交互式.

总体来说, Shell一共有四种运行方式:

  • 交互式的登陆Shell;
  • 交互式的非登陆Shell;
  • 非交互式的登陆Shell;
  • 非交互式的非登陆Shell.

判断Shell是否是交互式

判断是否为交互式Shell有两种简单的方法.

  • 查看变量-的值, 如果值中包含了字母i, 则表示交互式(interactive); 不包含i, 为非交互式.
  • 查看变量PS1的值, 如果为非空, 则为交互式, 否则为非交互式, 因为非交互式会清空该变量.

注解

变量PS1表示交互式下的命令提示符.

判断Shell是否为登陆式

判断Shell是否为登陆式也非常简单, 只需要执行shopt login_shell即可, 值为on表示为登陆式, off表示非登陆式.

常见的Shell启动方式

  • 通过Linux控制台(不是桌面环境自带的终端)或者ssh登陆Shell时, 为交互式的登陆Shell;
  • 执行bash时默认是非登陆的, 增加--login选项(简写-l)后变成登陆式;
  • 进入子Shell时, 子Shell会继承父Shell的交互和登陆属性;
  • ssh执行远程命令, 但不登陆时, 为非交互非登陆式;
  • 在Linux桌面环境下打开终端时, 为交互式的非登陆Shell.