Mengapa bash tidak menyimpan perintah yang dimulai dengan spasi?

48

Jika saya melakukan urutan perintah seperti:

$ ls
$ grep abc file.txt

dan kemudian gunakan tombol panah atas untuk mendapatkan yang sebelumnya, terminal akan menunjukkan cmd terakhir (yang di grepsini)

Tetapi jika saya melakukan sesuatu seperti ini:

$ ls
$   grep abc file.txt

di mana grepdidahului oleh spasi, menekan memberi ls, tidak grep.

Kenapa ini?

sandyp
sumber
Tindak lanjut: Mengapa bash memiliki opsi HISTCONTROL = ignorespace?
Gilles 'SO- stop being evil'

Jawaban:

52
echo $HISTCONTROL
ignoreboth

man bash:

HISTCONTROL

Daftar nilai yang dipisahkan oleh titik dua yang mengendalikan bagaimana perintah disimpan pada daftar riwayat. Jika daftar nilai termasuk ignorespace, garis yang dimulai dengan karakter spasi tidak disimpan dalam daftar riwayat. Nilai ignoredupsgaris penyebab yang cocok dengan entri riwayat sebelumnya tidak disimpan. Nilai ignorebothadalah singkatan untuk ignorespacedan ignoredups.

Hauke ​​Laging
sumber
3
dan HISTCONTROLdiatur ke ignorebothdalam default yang ~/.bashrcdisediakan oleh debiansetidaknya.
Stéphane Chazelas
1
Apa gunanya ignorespace?
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
1
Di Ubuntu 14.04 defaultnya adalah ignorebothyang agak menjengkelkan.
Nick Gammon
6
Ciro, saya berasumsi bahwa Anda dapat memasukkan perintah seperti echo "drop database mydb" | mysql -u root -pPassworddan tidak menyimpannya dalam riwayat.
Jeremy
2
Untuk pengguna mac, HISTCONTROL tidak diatur ke apa-apa, sehingga Anda akan perlu untuk menambahkannya ke bash_profile Anda atau serupa - unix.stackexchange.com/questions/115917/...
chrismarx