Pourquoi le '!!' raccourci n'a pas réussi à exécuter la commande précédemment exécutée?

14

Récemment, j'ai tapé sur mon terminal

username:~$ !!

et a obtenu une erreur de bash :

bash: !!: command not found

Dans le même temps, il réussit lorsqu'il est fait sous superutilisateur.

J'ai examiné le contenu de PATH de mon utilisateur et je n'ai rien trouvé de suspect:

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

Voici la sortie 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

Un autre:

username:~$ echo foo
foo
username:~$ !!
bash: !!: command not found
Bulat M.
la source
2
Cela arrive-t-il toujours? Et si vous couriez echo fooet ensuite !!? En outre, s'il vous plaît modifier votre question et ajouter la sortie history | tailou si. Votre session shell a-t-elle un historique?
terdon
1
Quelle est votre langue de saisie? Utilisez-vous l'anglais standard ou un autre clavier?
Sergiy Kolodyazhnyy
5
Est histexpanddéfini dans vos options de shell? quelle est la sortie de echo $-?
steeldriver
2
@muru, ... parlant en tant qu'ancien habitué de freenode #bash, je passais beaucoup de temps à conseiller aux gens de le désactiver, sans obtenir de réponse des autres anciens de la chaîne - les gens étant surpris par des commandes avec des !littéraux non honorés sans les citations supplémentaires étaient beaucoup plus courantes que de trouver quelqu'un qui voulait que la fonctionnalité d'extension de l'historique ne soit pas disponible sous une forme plus facile à utiliser via readline.
Charles Duffy
1
@muru, je l'ai désactivé au milieu de mon fichier de configuration lors de la copie aveugle du contenu .bashrc à partir d'un des nombreux exemples de fichiers que j'ai trouvés sur Internet.
Bulat M.

Réponses:

23

L'expansion de l'historique peut être désactivée:

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

Essayez set -Hou set -o histexpand.

muru
la source
@Serg set -o, ou la variable spéciale$-
muru
OK, je vois, c'est ce que vous faites avecset -o | grep hist
Sergiy Kolodyazhnyy