Bagaimana cara membuat bash (Terminal.app) mengingat riwayat sesi sebelumnya?

11

Di komputer saya di tempat kerja, bash shell saya mengingat sejarah dari sesi sebelumnya, bahkan jika saya baru saja membuka terminal baru.
Di komputer saya di rumah, ini tidak terjadi.
Saya memiliki OS 10.6.8 yang sama di kedua mesin dan saya tidak memiliki pengaturan terkait sejarah di .bash_profile.
Bagaimana saya bisa mengatur ini di komputer rumah saya sehingga mengingat sejarah di seluruh sesi?

Petruza
sumber
Juga ditanyakan di superuser.com/q/421544/4714
glenn jackman

Jawaban:

11

Anda harus memberi tahu bash tempat menyimpan file riwayat Anda, dan berapa banyak baris yang harus disimpan:

# Set the location of your HISTFILE
echo "export HISTFILE=/Users/<USERNAME>/.bash_history" >> ~/.bash_profile

# Number of lines to keep (1000 in this example)
echo "export HISTFILESIZE=1000" >> ~/.bash_profile

# Set how many commands to keep in the current session history list
echo "export HISTSIZE=80" >> ~/.bash_profile

# Ignore commands that start with a space
echo "export HISTIGNORE=\"&:[ ]*:exit\"" >> ~/.bash_profile
Danau Aaron
sumber
3
Itu semua seharusnya tidak perlu secara default. Konfigurasi default bash (setidaknya pada Mac OS X) memungkinkan riwayat perintah.
Chris Halaman
Kata kunci, / harus /. Jika itu tidak merekam riwayat, ini akan memaksa bash untuk menjaga riwayat tetap init.
Danau Aaron
2
Tidak hanya seharusnya , tetapi akan kecuali jika sesuatu telah dilakukan untuk menekan perilaku sejarah default, dalam hal ini, hanya membanting beberapa nilai ke dalam variabel-variabel ini hanya melipatkan masalah sebenarnya. Jika jawaban ini menyelesaikan masalah, maka sesuatu yang lain benar-benar kacau dan harus diperbaiki untuk menghindari masalah lain.
Chris Page
Anda dapat mengatur pengaturan ini, tetapi saya menemukan solusi / jawaban yang lebih sederhana jika Anda hanya ingin "mengaktifkan" riwayat pada terminal. Itu hanya bekerja dengan baik untuk saya apple.stackexchange.com/a/220667/243988 (saya menggunakan macOS High Sierra)
jpruizs
4

Saya baru tahu saya memiliki masalah yang sama, meskipun majikan saya hanya memiliki dua Mac, dan tidak ada yang duduk di meja saya . Tidak bisa diterima, tetapi pertempuran untuk waktu lain.

Bagaimanapun, di rumah, Mac Mini (dimigrasikan dari MacBook Pro) tidak bekerja sama bahkan setelah pengaturan .bashrcdan / atau .profile. Kemudian saya menemukan bahwa ~/.bash_historyfile saya secara misterius dimiliki oleh root. Harus melakukan ini:

sudo -iu root
cd ~(myusername)
chown (myusername) .bash_history

(Ya, saya tahu itu bisa dilakukan dalam lebih sedikit perintah. Kebiasaan.)

Lalu saya keluar dari Terminal, dan memulai yang baru. Woot! Segala macam sejarah yang sebelumnya hilang datang kembali. Bagus sekali.

Kemungkinan siapa pun yang membaca ini secara tidak sengaja menempatkan diri dalam kesulitan ini: 0,2%. Saya yakin saya telah mengacaukan ini ketika terlalu bersemangat "memperbaiki" sesuatu yang lain.

kelvin0mql
sumber
4

Saya punya masalah ini dan yang berhasil bagi saya adalah membuat file yang dipanggil .bash_sessions_disabledi folder pengguna saya ( ~/).

Pada dasarnya OS X membuat file histori di .bash_sessionsfolder untuk setiap sesi (dalam kasus saya, satu untuk setiap Tab). Dan bahkan dengan benar menutup sesi-sesi ini, OS X tidak mengulang sejarah .bash_history.

Membuat .bash_sessions_disableAnda menonaktifkan perilaku ini.

touch ~/.bash_sessions_disable
Kleber Kihara
sumber
Menonaktifkan riwayat perintah per sesi — perilaku default — adalah kebalikan dari apa yang diminta.
Chris Page
@ ChrisPage Itu hanya benar jika penanya bertanya tentang sejarah per sesi, yang tampaknya tidak menjadi masalah ("ingat sejarah lintas sesi"). Menonaktifkan perilaku sesi bash ENABLES memutar ulang riwayat tunggal .bash_historydaripada menyimpan riwayat di bawah .bash_sessions/folder. Ini adalah jawaban yang benar.
Matt H
@MattH Pertanyaannya bertanya bagaimana membuat riwayat berfungsi kembali, karena sepertinya tidak berfungsi sama sekali, dan menonaktifkan fitur riwayat per sesi ini tidak berjalan ke arah yang benar. Jika ada bug dalam mekanisme riwayat per sesi, seseorang harus mengajukan laporan bug, tetapi memberikan jawaban seolah-olah mematikannya entah bagaimana umumnya benar untuk semua pengguna adalah ... salah. Biasanya berfungsi dengan baik. Lihat komentar saya tentang berbagai jawaban untuk informasi lebih lanjut.
Chris Page
Saya seharusnya juga menyebutkan ini kembali ketika saya awalnya berkomentar: menonaktifkan seluruh mekanisme bash save / restore dimaksudkan sebagai upaya terakhir dan harus dihindari jika mungkin. Anda hanya dapat mematikan perilaku riwayat perintah per sesi dengan mengatur SHELL_SESSION_HISTORYke 0, seperti yang didokumentasikan /etc/bashrc_Apple_Terminal.
Chris Page
1

Jawaban dari utas Reddit ini menyelamatkan saya:

Mungkin RVM mencegah "kait" keluar untuk menjalankan bash_sessions. Jika Anda mengomentari baris berikut di .bash_profile Anda, itu akan berfungsi.

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
noio
sumber
0

Saya memiliki masalah yang sama juga, tidak ada riwayat yang tercatat. Solusi yang diberikan tidak berhasil, tetapi akhirnya saya menemukan bahwa masalahnya sesederhana .bash_history yang hilang

Solusinya adalah pergi ke /home/[username]/dan menambahkan file .bash_history, jadi

nano .bash_history

dan kemudian ketik apa pun di file (kalau tidak itu tidak akan dibuat), keluar dan simpan. Setelah ini sejarah mulai berfungsi secara normal.

Fabian
sumber
Jika ini menyelesaikan masalah, maka ada sesuatu yang salah dan harus diperbaiki untuk menghindari masalah lain. Jika Anda memulai Bash ketika tidak ada file riwayat, itu akan membuatnya. Jika tidak mencoba membuatnya, atau tidak dapat membuatnya, ada yang salah dengan beberapa skrip startup shell atau izin direktori home. Misalnya, lihat jawabannya: apple.stackexchange.com/a/118764/6883
Chris Page