我知道有两种方法来测试 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
有什么帮助。