为什么“!” 快捷方式无法执行先前运行的命令?


14

最近我在终端机上打字

username:~$ !!

并从bash得到错误:

bash: !!: command not found

同时,当在超级用户下完成时,它会成功。

我调查了用户PATH的内容,发现没有可疑的地方:

/home/username/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

这是输出:

username:~$ history | tail
1993  date
1994  cal
1995  vcal
1996  uptime
1997  uname
1998  uptime
1999  uname
2000  uptime
2001  uname
2002  history | tail

另一个:

username:~$ echo foo
foo
username:~$ !!
bash: !!: command not found

2
它总是发生吗?如果您跑步echo foo然后!!呢?另外,请编辑您的问题并添加左右的输出history | tail。您的Shell会话是否有任何历史记录?
terdon

1
您的输入语言是什么?您使用的是标准英语还是其他键盘?
Sergiy Kolodyazhnyy,2016年

5
histexpand在您的shell选项中设置的吗?输出是echo $-什么?
steeldriver '16

2
@muru,...作为以前的freenode #bash常规说话时,我过去常常花很多时间建议人们禁用它,而又不会受到其他渠道长老的任何压制-人们对命令感到惊讶,因为命令!字面意思不兑现与通过readline查找不希望以更易于使用的形式提供历史扩展功能的人相比,额外的报价是更常见的事情。
查尔斯·达菲

1
@muru,当我从互联网上找到的许多示例文件之一中盲目复制.bashrc内容时,我在配置文件中间禁用了它。
Bulat M.

Answers:


23

历史记录扩展可能被禁用:

$ echo foo
foo
$ !!
echo foo
foo
$ set +o histexpand
$ set -o | grep hist
histexpand      off
history         on
$ echo foo
foo
$ !!
bash: !!: command not found

尝试set -Hset -o histexpand


@Serg set -o,或特殊的变量$-
穆鲁

好吧,我知道了,这就是您正在做的事情set -o | grep hist
Sergiy Kolodyazhnyy
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.