复合指挥部的第二行和后续行是否不受 HISTCONTROL 的影响?



咨询Bash的男人页面时,它读取有关bash历史的句子:

多行复合命令的第二个和后续行是 未经过测试,并将其添加到历史中,无论其价值如何 HISTCONTROL

,但我尝试过:

$ HISTCONTROL=ignorespace
$  if [ -f /var/log/messages ]
> then
> echo "/var/log/message exists."
> fi
$ history | tail -2
   18  HISTCONTROL=ignorespace
   19  history | tail -2

请注意,if由一个空间导致。为什么此if复合命令的第二行仍未出现在历史记录中?

多行命令将是shell的一行:

$  if [ -f /var/log/messages ]
> then
> echo "/var/log/message exists."
> fi

与:

一样
if [ -f /var/log/messages ]; then echo "/var/log/message exists."; fi

因此,如果将空格放在一行命令上,它将像历史记录设置一样被忽略。

add:shell选项cmdhist的效果

shopt -s cmdhist # set cmdhist (is set by default)
if [ -d /tmp ]
> then
> echo Hello
> fi
Hello
history 2
43  if [ -d /tmp ]; then echo Hello; fi
44  history 2

在这种情况下,多行命令与单行连接。

shopt -u cmdhist # unset cmdhist
if [ -d /tmp ]
> then
> echo Hello
> fi
Hello
history 5
   46  if [ -d /tmp ]
   47  then
   48  echo Hello
   49  fi
   50  history 5

在这种情况下,您会分别看到历史中的每一行。

如果您现在设置了ignorespace选项,则应在[]的所有4行上使用。因此,猜猜免责声明(在Bash Man中)会说不确定它与CMDHIST = OFF一起工作。因此,忽略肯定不会在第二行上"然后"不起作用。如果您在"然后"之前放置一个空间,则不会忽略它。它仅在第一行工作,但随后全部工作。

所以最后一个示例(不忽略第二行从空间开始)

if [ -d /tmp ]
>  then
> echo Hello
> fi
Hello
history 5
   66  if [ -d /tmp ]
   67   then
   68  echo Hello
   69  fi
   70  history 5


我希望这会回答您的问题。

相关内容

  • 没有找到相关文章

最新更新