シェルが対話型かどうかをテストする方法は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
テストがどのように役立つかわかりません。