Mengapa bash history di mac saya tidak akan disimpan?


27

Saya selalu menggunakan bash untuk bekerja, dan tidak pernah memiliki masalah dengannya. Sekarang, itu tidak menyimpan perintah apa pun dalam sejarah lagi. Jika saya membuka terminal jendela, coba beberapa perintah, itu bertindak seperti semuanya telah bekerja dengan baik dan tunjukkan saya sejarah menggunakan tombol panah. Tetapi jika saya menutup jendela (dan itu adalah waktu yang seharusnya disimpan pada file .bash_history) dan membuka yang lain, tidak ada tanda-tanda perintah terakhir.

Bagaimana saya bisa mengetahui apa yang salah? Atau atur ulang semuanya dari yang kosong.


Bisa berupa profil atau file rc Anda. Apa yang ada di dalamnya?
user14492

1
Apa izin dan pemilik di .bash_history Anda? Milik saya 600 dan dimiliki oleh saya. Juga, apa yang ada di $ HIST_FILE?
Blm

@blm Izinnya benar; mencetak $ HIST_FILE yang saya ketahui tentang .bash_sessions . Rupanya ada masalah ketika, di akhir sesi, OS menyimpan file tersebut ke file histori. Saya tidak ingin menyelidiki lagi jadi saya cukup meletakkan ini di rumah saya .bash_sessions_disabledan tahu itu kembali ke perilaku default
abaini01

Silakan pertimbangkan mengajukan laporan bug dengan Apple: developer.apple.com/bug-reporting
Chris Page

Jawaban:


29

Saya melakukan ini:

Tambahkan variabel ke .bash_profilefile

SHELL_SESSION_HISTORY=0

restart terminal dan setelah itu berfungsi seperti yang saya inginkan. (Ini menyimpan perintah setelah saya menutup terminal)

PS Saya juga menggunakan variabel HISTFILESIZEdanHISTSIZE

HISTSIZE adalah jumlah baris atau perintah yang disimpan dalam memori dalam daftar riwayat saat sesi bash Anda sedang berlangsung.

HISTFILESIZE adalah jumlah baris atau perintah yang (a) diizinkan dalam file histori pada saat startup suatu sesi, dan (b) disimpan dalam file histori di akhir sesi bash Anda untuk digunakan di sesi mendatang.


3
Menambahkan satu baris berfungsi dengan baik untuk saya di El Capitan, terima kasih.
Aidan

2
Terima kasih! Saya ingin tahu mengapa ini bekerja juga, jika seseorang kebetulan tahu. (Sejarah = 0 akan menyiratkan ke pikiran bodoh saya bahwa semua sejarah akan hilang, namun tampaknya memiliki efek sebaliknya.)
Mike Williamson

@ Sysqa Apakah ada solusi "di tengah"? Fitur yang "menyimpan dan mengembalikan histori perintah bash secara independen untuk setiap sesi terminal yang dipulihkan" terdengar seperti fitur yang bagus yang dapat dimanfaatkan oleh beberapa program. Apakah ada cara untuk mendapatkan manfaat dari konfigurasi sebelumnya dan juga yang baru dengan beberapa jenis konfigurasi?
loco.loop

8

Dimulai pada OS X 10.11 El Capitan , skrip yang diinstal sistem /etc/bashrc_Apple_Terminalberkoordinasi dengan Terminal untuk menyimpan / mengembalikan histori perintah terpisah untuk setiap terminal yang dipulihkan untuk Resume .

Baca komentar di /etc/bashrc_Apple_Terminaluntuk penjelasan tentang bagaimana mengelola sejarah perintah per-terminal dan bagaimana menyesuaikannya.

Jika Anda menyesuaikan PROMPT_COMMANDpastikan untuk menyatukan ke nilai sebelumnya sehingga Anda tidak menghapus perintah yang disediakan sistem:

PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND; }your_code_here"

Jika Anda memasang EXITpenangan sinyal dengan trappastikan untuk melakukan sesuatu yang serupa (atau panggil shell_session_update dari penangan Anda jika Anda tidak tahu cara menggabungkannya dengan nilai sebelumnya — itu sedikit terlibat).

Saat Anda keluar dari shell, kode ini akan menyimpan perintah baru ke riwayat terminal di ~/.bash_sessions. Untuk melihat apakah ada masalah, alih-alih menutup terminal, keluar dari shell secara manual dengan exit(atau Control-D). Ini mencatat pesan kemajuan. Catatan jika tidak lengkap atau jika ada peringatan atau pesan kesalahan ditampilkan.

Secara umum, bashrc_Apple_Terminalupaya untuk mendeteksi dan menonaktifkan riwayat per sesi jika sepertinya pengguna telah melakukan penyesuaian yang tidak kompatibel dengannya. Kedengarannya seperti Anda mungkin telah menemukan yang tidak ditangani. Harap pertimbangkan untuk melaporkan laporan bug dengan Apple: https://developer.apple.com/bug-reporting/


Saya belum melakukan konfigurasi khusus jadi saya kira itu bukan masalah. Bisakah Anda menjelaskan apa yang PROMPT_COMMAND lakukan.
loco.loop

@ loco.loop Apakah maksud Anda “Untuk apa variabel PROMPT_COMMAND Bash?” atau apakah maksud Anda “Untuk apa /etc/bashrc_Apple_TerminalPROMPT_COMMAND digunakan?”? Jika yang terakhir, saya merujuk Anda ke kode, yang didokumentasikan secara rinci. Atau, Anda harus memulai tanya jawab lain tentang itu.
Chris Halaman

Maksud saya PROMPT_COMMAND untuk ... @ChrisPage
loco.loop

@ loco.loop Saya merujuk Anda ke dokumentasi Bash, atau menyarankan Anda memulai tanya jawab tentang itu.
Chris Halaman

6

Untuk berjaga-jaga jika ada orang lain di luar sana yang memiliki RVM (Ruby Version Manager) diinstal: Periksa untuk melihat apakah Anda memiliki baris berikut di file ~/.profile, ~/.bashrcatau Anda ~/.bash_profile.

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

Mungkin RVM mencegah "kait" keluar untuk menjalankan bash_sessions.

Itu masalah bagi saya. Coba komentari.

Sumber: Reddit


3

Pada pemasangan baru Mac OS X (diperbarui ke 10.13.6), riwayat perintah bash tidak disimpan. Juga tidak ada file .bashrc atau .bash_profile. Dalam hal ini, hanya menambahkan file .bashrc kosong memperbaikinya untuk saya.

touch .bashrc

Tampaknya hanya itulah yang Anda butuhkan ...


tampaknya untuk memperbaiki masalah pada Mojave / 10.14, juga :-)
ssc

3

Saya memiliki masalah yang sama dengan osx Mojave yang baru diinstal. Saya memeriksa ~/.bash_historyfile saya dan melihat ini:

$ ls -l ~/.bash_history -rw------- 1 root staff 599 Jan 4 20:50 /Users/gilm/.bash_history

Cukup mengunyahnya kembali ke gilm memecahkan masalah. Saya menggunakan:

sudo chown gilm /Users/gilm/.bash_history

dan itu memecahkan masalah saya.


2

Anda juga dapat membuat .bash_logoutfile dengan yang berikut:

shell_session_update

Bersumber dari komentar GitHub


Atau, ketik trap shell_session_update EXITsekali secara manual , dan logout. Ada petunjuk dalam /etc/bashrc_Apple_Terminalskrip yang terlalu membosankan untuk dimasukkan di sini.
MarkHu
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.