在 bash 中,如何暂时中止(通常称为“输出注释”)带有行连续反斜杠的一段命令行?

在 bash 中,如何暂时中止(通常称为“输出注释”)带有行连续反斜杠的一段命令行?

为了使我的工作更轻松,我正在编写一个很长的 bash 脚本,目的是在重启后、工作周期开始时或尝试其他操作系统时运行一次,当没有可用的 bash_history 文件时。它应该用许多复杂的命令、单行命令填充历史记录列表,就像我几个小时前使用过它们一样。

但是因为这些命令实际上不应该在那一刻运行,所以我通过以下命令将它们放入历史列表中:

history -s ': # echo "== do not sleep"'

同时使用冒号“:”和井号“#”,具有多年来经历过但此刻被遗忘的一些优势。

所以我可以在历史记录中搜索,删除行首的注释标记“:#”,然后点击Return

我知道我可以使用其他方法来做到这一点,但是这种方法效果很好,除了复杂的长命令、单行命令(例如包含带有反斜杠或其他特殊的行连续符)。

在其他计算机语言中,例如 C、Perl,有“注释掉”代码的方法。

通常人们可以以某种方式在 bash 中模拟这些事情以获得相同的结果。

有人知道怎么做这个吗?

答案1

解决方案

截至 2022 年 8 月 2 日:

现在我有一个可行的解决方案,可以在这里展示它(我以前的尝试由于打字错误而失败了):

read -r -d "" WEx <<EOT
: # echo "do not sleep \
in \
many \
lines"
EOT

history -s "$WEx" 

分隔符 EOT 可以用双引号引起来,也可以不用。区别在于:

如果用双引号引起来,则将其存储在历史列表中的多个历史行中,但如果不使用双引号,则将其存储在单个历史行中。

为了使整个块保持有效,直到历史记录行开头的“:#”未被删除,分隔符不能用双引号引起来。

需要注意的是:

shopt 选项 cmdhist 已设置(默认)

shopt 选项 lithist 未设置

问候

安东迪德

相关内容