Mengapa '!!' pintas gagal menjalankan perintah yang sebelumnya dijalankan?

14

Baru-baru ini saya mengetik di terminal saya

username:~$ !!

dan mendapat kesalahan dari bash :

bash: !!: command not found

Pada saat yang sama, itu berhasil ketika dilakukan di bawah superuser.

Saya menyelidiki konten PATH pengguna saya dan tidak menemukan yang mencurigakan:

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

Berikut ini adalah output dari:

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

Lain:

username:~$ echo foo
foo
username:~$ !!
bash: !!: command not found
Bulat M.
sumber
2
Apakah itu selalu terjadi? Bagaimana jika Anda berlari echo foolalu !!? Juga, harap edit pertanyaan Anda dan tambahkan hasilnya history | tailatau kurang lebih. Apakah sesi shell Anda memiliki riwayat?
terdon
1
Apa bahasa input Anda? Apakah Anda menggunakan bahasa Inggris standar atau keyboard lain?
Sergiy Kolodyazhnyy
5
Sudah histexpanddiatur dalam opsi shell Anda? apa output dari echo $-?
steeldriver
2
@muru, ... berbicara sebagai mantan freenode #bash biasa, saya biasa menghabiskan banyak waktu menasihati orang-orang untuk menonaktifkannya, tanpa mendapatkan pushback dari tetua saluran lainnya - orang-orang dikejutkan oleh perintah dengan !literal yang tidak dihargai tanpa kutipan tambahan adalah kejadian yang jauh lebih umum daripada menemukan seseorang yang menginginkan fungsionalitas perluasan riwayat tidak tersedia dalam bentuk yang lebih mudah digunakan melalui readline.
Charles Duffy
1
@muru, saya menonaktifkannya di tengah file konfigurasi saya ketika sedang menyalin konten .bashrc secara membabi buta dari salah satu dari banyak contoh file yang saya temukan di internet.
Bulat M.

Jawaban:

23

Perluasan riwayat mungkin dinonaktifkan:

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

Coba set -Hatau set -o histexpand.

muru
sumber
@Erg set -o, atau variabel khusus$-
muru
Oke, saya mengerti, itulah yang sedang Anda lakukan set -o | grep hist
Sergiy Kolodyazhnyy