/etc/profileが$-の-iフラグの代わりにPS1をチェックするのはなぜですか?

/etc/profileが$-の-iフラグの代わりにPS1をチェックするのはなぜですか?

シェルが対話型かどうかをテストする方法は2つあります。

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

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

iオプションフラグをチェックする方がより安定していることがわかりました。これは、相互作用の明確な指標であることを考慮すると意味があります。

/etc/profileしかし、私のシステムの起動ファイル(例:)を見ると、Ubuntuを実行していること/etc/bash.bashrcがわかりますPS1。これがプラットフォームごとにどう違うかわかりません。

これが次のことを意味するかどうか疑問に思います。

  • スタートファイル作成者が思ったよりも実力が足りません。
  • 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テストがどのように役立つかわかりません。

おすすめ記事