bash shell中set命令的参数“i”是什么?

sha*_*ant 7 bash shell-builtin set

我通过键入 查找了 shell 内置命令集help set,简短的语法说明显示:

设置 [-abefhkmnptuvxBCHP] [-o 选项名称] [--] [arg ...]

帮助文档解释说,变量 $- 保存使用 set 命令设置的所有当前参数。

所以,我确实echo $-显示了 shell 的所有参数设置,我的是:

他BH

文档和上面的简短语法描述中提到了所有字母,但缺少一个:i选项。i setbash中的参数是什么意思?

Ste*_*itt 11

i那里意味着shell是交互的。

这在讨论 shell 交互情况的联机帮助页部分中进行了描述:

交互式 shell 是一个没有非选项参数启动并且没有-c标准输入和错误都连接到终端(由 确定 isatty(3))的-i选项,或者一个以选项启动。 PS1设置并$-包括iifbash是交互式的,允许 shell 脚本或启动文件测试此状态。

shell 的交互性是在初始化时确定的,它的效果在 shell 的生命周期内不会改变;这就是为什么set不报告i为可以更改的标志的原因。在 Bash 4.3 版中,set -i或被set +i接受,但除了在forced_interactive内部更改标志之外没有任何影响(并且该标志仅在初始化期间读取)。在 4.4 版中,它们会产生错误消息。您可以flags.c在 Bash 源代码中查看标志处理的详细信息。