我想知道是否可以关闭非交互式 bash 脚本中的注释功能。
使用 或 打开或关闭“interactive_comments”或“interactive-comments”对非交互式 shell 没有影响set
。shopt
为什么会发生这种情况?我错过了什么?
答案1
我只是希望使用此(交互式评论)选项获得交互式 shell。
阅读文档而不是猜测。
如果设置,则允许以 开头的单词
#
导致该单词以及该行上的所有剩余字符在交互式 shell 中被忽略
打开该选项不会使 shell 具有交互性。它控制#
如果 shell 是交互式的,是否启动注释;如果 shell 不是交互式的,则它不起作用。
还,
默认情况下启用此选项。
所以开启没有任何效果。
此外,记录的方法是shopt -s interactive_comments
打开和shopt -u interactive_comments
关闭它。但是set -o interactive-comments
和set +o interactive-comments
是(我认为没有记录的)替代方案。
仅当将其作为交互式 shell 启动时,您才能获得交互式 shell。没有办法使非交互式 shell 变得交互式。 shell 是否是交互式的取决于它的命令行以及它是否在终端上运行:
- 使用选项
-i
,bash 以交互方式启动。 - 没有
-i
但有-c
或有脚本文件名(bash -c 'some command'
或bash path/to/script
),bash 以非交互方式启动。 - 如果没有
-i
或-c
脚本文件名,如果 bash 的标准输入和标准错误都是终端,则 bash 以交互方式启动,否则以非交互方式启动。
无论选项的状态如何interactive_comments
,脚本文件和-c
脚本中的注释始终会被识别。#
在单词开头不开始注释的唯一情况是 shell 是交互式的,该interactive_comments
选项已关闭,并且它正在从标准输入读取。
尝试这个script.sh
:
# a comment
shopt interactive_comments
set +o interactive-comments
shopt interactive_comments
# another comment
执行记录:
bash-5.0$ # a comment
bash-5.0$ shopt interactive_comments
interactive_comments on
bash-5.0$ set +o interactive-comments
bash-5.0$ shopt interactive_comments
interactive_comments off
bash-5.0$ # another comment
bash: #: command not found
bash-5.0$ exit