Linux 是复合命令';第二行和后续行不受bash中HISTCONTROL的影响?
在查阅bash的手册页时,它读到了关于bash历史的这句话: 多行复合命令的第二行和后续行是 未经测试,并且无论Linux 是复合命令';第二行和后续行不受bash中HISTCONTROL的影响?,linux,bash,Linux,Bash,在查阅bash的手册页时,它读到了关于bash历史的这句话: 多行复合命令的第二行和后续行是 未经测试,并且无论 HISTCONTROL 但我试过: $ HISTCONTROL=ignorespace $ if [ -f /var/log/messages ] > then > echo "/var/log/message exists." > fi $ history | tail -2 18 HISTCONTROL=ignorespace 19 histo
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
由空格引导。如果复合命令仍然没有出现在历史记录中,为什么该的第二行仍然没有出现?对于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
因此,如果在单行命令上放置空格,它将像历史设置一样被忽略
添加: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选项,则它应适用于If[]的所有4行。
因此,猜一猜免责声明(在bash-man中)会说,不确定它在cmdhist=off时是否始终有效。
所以ignoreoption在第二行“then”上肯定不起作用。如果在“then”前面加空格,则不会忽略它。它只在第一行起作用,然后在下一行起作用。
最后一个例子(不忽略第二行以空格开头)
我希望这能回答你的问题。那么,这句话是什么意思?我不太确定。我想如果禁用cmdhist选项(shopts-u cmdhist),则可以确定忽略设置是否100%有效。默认情况下,此shell选项处于启用状态。请参见添加答案中的效果。只是一个猜测!!!
if [ -d /tmp ]
> then
> echo Hello
> fi
Hello
history 5
66 if [ -d /tmp ]
67 then
68 echo Hello
69 fi
70 history 5