Startup

為什麼 /etc/profile 檢查 PS1 而不是 $- 中的 -i 標誌

  • October 19, 2017

我知道有兩種方法可以測試 shell 是否是互動式的,

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

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

我讀過檢查i選項標誌更可靠,這是有道理的,因為它是互動性的明確指標。

但是,當我查看系統上的啟動文件(例如/etc/profile, /etc/bash.bashrc)時,它們會檢查PS1. 我正在執行 Ubuntu。我不知道這是特定於平台的。

我想知道這是否意味著:

  • 啟動文件的作者沒有我想像的那麼熟練
  • PS1在這種情況下足夠可靠
  • PS1總的來說足夠可靠,我想太多了

在我的 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什麼幫助。

引用自:https://unix.stackexchange.com/questions/398847