Bash:运行“set -i”的效果?

Bash:运行“set -i”的效果?

今天,我正在阅读的文档set,突然意识到我的标志变量($-)包含一个在帮助页面(help set)上未记录的标志,并且在GNU网站: i
过了一段时间,我终于找到了这一页i表明交互的
我首先尝试的当然是关闭它。
运行后set +i$-不再包含i,但除此之外,一切似乎仍像往常一样工作。
同样,set -i在运行时放入脚本文件也没有明显的效果。

所以,我的问题是:除了修改变量之外,将set -i/set +i放入脚本中或在命令行上运行它是否真的有任何效果$-

答案1

显然,在 shell 初始化后,在命令行上使用set -i或 的唯一后果是改变 的值。只有在调用 创建 shell 时,该选项才有意义,在这种情况下,它将强制 shell 进行交互。set +i$--ibash

快速检查 bash 源代码表明,执行期间的交互式检查引用全局变量interactive,该变量在初始化序列期间设置,然后不会被修改。只有set [+-]i$-使用forced_interactive全局变量。(interactive如果设置了,则设置为 true forced_interactive,否则如中所述man bash。)

答案2

bash-1.14.7-14 在手册页中有关于 -i 选项的文档。 https://bugzilla.redhat.com/show_bug.cgi?id=1129

   -i        If the -i option is present, the shell is interactive.

交互式 shell 从 tty 上的用户输入中读取命令。除其他功能外,此类 shell 在激活时会读取启动文件、显示提示符并默认启用作业控制。用户可以与 shell 交互。运行脚本的 shell 始终是非交互式 shell。

更多信息请点击这里:

http://www.tldp.org/LDP/abs/html/intandnonint.html https://unix.stackexchange.com/questions/43385/what-do-you-mean-by-interactive-shell

补充:更多链接

关于非登录 shell 的一个非常好的答案

https://askubuntu.com/questions/247738/why-is-etc-profile-not-invoked-for-non-login-shells

交互式 shell 中的 bash 手册

http://www.gnu.org/software/bash/manual/html_node/Interactive-Shell-Behavior.html#Interactive-Shell-Behavior

相关内容