为什么 /etc/profile 检查 PS1 而不是 $- 中的 -i 标志

为什么 /etc/profile 检查 PS1 而不是 $- 中的 -i 标志

我知道有两种方法来测试 shell 是否是交互式的,

[[ $- == *i* ]] && echo "-i option flag indicates interactive"

[ -n "$PS1" ] && echo "prompt is set"

我读过,检查i选项标志更可靠,考虑到它是交互性的明确指标,这是有道理的。

但是当我查看系统上的启动文件(例如/etc/profile/etc/bash.bashrc)时,它们会检查PS1.我正在运行Ubuntu。我不知道这是如何特定于平台的。

我想知道这是否意味着:

  • 启动文件的作者并不像我想象的那么熟练
  • PS1在这种情况下足够可靠
  • PS1总体来说足够可靠,而且我想得太多了

答案1

在我的 Ubuntu 16.04 系统上,这是签入/etc/profile

if [ "$PS1" ]; then
  if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then
    # The file bash.bashrc already sets the default PS1.
    # PS1='\h:\w\$ '
    if [ -f /etc/bash.bashrc ]; then
      . /etc/bash.bashrc
    fi
  else
    if [ "`id -u`" -eq 0 ]; then
      PS1='# '
    else
      PS1='$ '
    fi
  fi
fi

...在我看来,这主要是关于设置PS1(而不是控制 rc 文件其余部分的行为)。我不知道测试对此-i有什么帮助。

相关内容