bash shell脚本编程经典实例(第2版)
上QQ阅读APP看书,第一时间看更新

1.10 确定是否处于交互模式

1.10.1 问题

你手边有一些代码,希望仅在处于(或不处于)交互模式时运行。

1.10.2 解决方案

使用例 1-1 中的 case 语句。

例 1-1 ch01/interactive

#!/usr/bin/env bash
# 文件名: interactive

case "$-" in
    *i*) # 在交互式shell中运行的代码位于此处
     ;;
    *) # 在非交互式shell中运行的代码位于此处
     ;;
esac

1.10.3 讨论

变量 $- 中保存了一个字符串,其中列出了当前所有的 shell 选项。如果 shell 处于交互模式,则其中会包含 i

你也可以采用如下代码(同样有效,但更推荐使用例 1-1 中的方法):

if [ -n "$PS1" ]; then
    echo This shell is interactive
else
    echo This shell is not interactive
fi

1.10.4 参考

  • help case
  • help set
  • 有关 case 语句的更多讲解,参见 6.14 节