Por que o '!!' atalho falha ao executar o comando executado anteriormente?

14

Recentemente eu digitei no meu terminal

username:~$ !!

e obteve erro do bash :

bash: !!: command not found

Ao mesmo tempo, é bem-sucedido quando feito sob superusuário.

Investiguei o conteúdo do PATH do meu usuário e não encontrei nada suspeito:

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

Aqui está a saída de:

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

Outro:

username:~$ echo foo
foo
username:~$ !!
bash: !!: command not found
Bulat M.
fonte
2
Isso sempre acontece? E se você correr echo fooe depois !!? Além disso, edite sua pergunta e adicione a saída de mais history | tailou menos. Sua sessão de shell tem algum histórico?
terdon
1
Qual é o seu idioma de entrada? Você está usando o inglês padrão ou outro teclado?
Sergiy Kolodyazhnyy
5
Está histexpanddefinido nas suas opções de shell? qual é a saída echo $-?
steeldriver
2
@muru, ... falando como um ex-freenode #bash regular, eu costumava passar muito tempo aconselhando as pessoas a desabilitá-lo, sem receber qualquer retrocesso de outros anciãos do canal - pessoas sendo surpreendidas por comandos com !literais que não são honrados sem a citação extra foi uma ocorrência muito mais comum do que encontrar alguém que desejasse que a funcionalidade de expansão do histórico não estivesse disponível no formato mais fácil de usar por meio da linha de leitura.
Charles Duffy
1
@uru, eu desativei no meio do meu arquivo de configuração quando estava copiando cegamente o conteúdo .bashrc de um dos muitos arquivos de exemplo que encontrei na internet.
precisa

Respostas:

23

A expansão do histórico pode estar desativada:

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

Tente set -Hou set -o histexpand.

muru
fonte
@Serg set -o, ou a variável especial$-
muru
OK, entendo, é com isso que você está fazendo #set -o | grep hist
Sergiy Kolodyazhnyy