Bagaimana saya bisa mendapatkan Terminal untuk menyimpan riwayat terpisah per tab / jendela?


13

Ketika saya me-restart Mac saya berhenti dan menyimpan buffer untuk setiap tab dengan benar, karena itu ada lagi ketika komputer mulai kembali. Tetapi sejarah perintah tidak buffered dengan benar per jendela / tab. Mereka semua buffer yang sama.

Saya berasumsi itu karena bash menggunakan hal yang sama ~/.bash_historyuntuk semua terminal tetapi apakah ada cara untuk menghindari peningkatan ini? Untuk membuat bash, atau mungkin Terminal, simpan secara terpisah?


Silakan lihat posting ini @ Kesalahan Server, ini menjelaskan bagaimana melakukan ini.
Mutant

Jawaban:


7

Anda dapat melakukan sesuatu seperti ini di .bashrc:

MYTTY=`tty`
HISTFILE=$HOME/.bash_history_`basename $MYTTY`

Ini akan membuat file histori terpisah di direktori home Anda seperti .bash_history_ttys002. Saat Anda membuat jendela terminal baru, itu akan menggunakan file riwayat yang sesuai dengan nama tty, yang biasanya akan ditentukan hanya dengan urutan di mana Anda membuat jendela terminal.


Terima kasih banyak! Menandai ini sebagai dipecahkan. Meskipun agak tergantung pada bagaimana OSX memuat terminal, saya merasa ini adalah yang terdekat yang bisa kita dapatkan.
Robert Sköld

Apakah ini juga mungkin per tab?
Joshua Muheim

Setiap tab adalah tty login yang terpisah, jadi harus berfungsi.
Seth Noble

Terminal memiliki dukungan eksplisit untuk jenis perilaku ini: ketika membuat terminal baru, terminal tersebut memberikan ID unik kepada terminal dan mengomunikasikannya ke sesi terminal melalui variabel lingkungan TERM_SESSION_ID. Ketika mengembalikan terminal untuk Lanjutkan, ia juga mengembalikan ID sesi yang sama sehingga program dapat menggunakannya untuk mengaitkan keadaan arbitrer dengan terminal yang dipulihkan. Gunakan ini sebagai bagian dari nama file, bukan tty.
Chris Page

@ChrisPage masalah dengan ini adalah bahwa sesi berbeda setiap kali Anda meluncurkan jendela / tab. Jadi itu akan membuat sejarah terpisah dan tidak menautkannya di seluruh sesi.
Rene Wooller

5

Saya menerapkan ini dengan menambahkan

export HISTFILE="$HOME/.bash_history_$TERM_SESSION_ID"
if [ ! -e $HISTFILE ]; then cp "$HOME/.bash_history" "$HISTFILE"; fi

ke ~/.bash_profilefile saya . Sekarang ketika saya menutup terminal dan membukanya lagi, setiap tab memiliki sejarah perintah terpisah yang dipulihkan. Juga ketika saya membuat tab baru, riwayat bawaan diinisialisasi dari.bash_history

Juga untuk membuat Terminalaplikasi untuk menjaga tab yang dibuka antara berhenti dan mulai ulang, Anda perlu memastikan bahwa opsi "close windows when quitting app" (on Yosemite)ini dinonaktifkan System Preferences -> General.


0

Anda dapat menetapkan $ HISTFILE khusus untuk masing-masing instance Terminal Anda.


Apakah ada cara untuk melakukan ini secara otomatis untuk setiap tab / jendela Terminal? Dan pastikan itu menggunakan yang sama $HISTFILEketika komputer mulai kembali?
Robert Sköld

1
Ya, ini mungkin dilakukan, tetapi kemudian bagaimana Anda mengaksesnya lagi? Anda harus secara manual menyulap file untuk mendapatkan ke file riwayat sebelumnya.
EmmEff

@EmmEff Terminal memiliki dukungan eksplisit untuk jenis perilaku ini: ketika ia menciptakan terminal baru, terminal tersebut memberikan terminal ID unik dan mengomunikasikannya ke sesi terminal melalui variabel lingkungan TERM_SESSION_ID. Ketika mengembalikan terminal untuk Lanjutkan, ia juga mengembalikan ID sesi yang sama sehingga program dapat menggunakannya untuk mengaitkan keadaan arbitrer dengan terminal yang dipulihkan.
Chris Page
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.