Làm cách nào tôi có thể nhận Terminal để giữ một lịch sử riêng cho mỗi tab / cửa sổ?


13

Khi tôi khởi động lại máy Mac, nó thoát và lưu bộ đệm cho từng tab một cách chính xác, vì nó sẽ xuất hiện trở lại khi máy tính khởi động lại. Nhưng lịch sử lệnh không được đệm đúng cho mỗi cửa sổ / tab. Chúng đều là cùng một bộ đệm.

Tôi cho rằng đó là vì bash sử dụng giống nhau ~/.bash_historycho tất cả các thiết bị đầu cuối nhưng có cách nào để tránh cải thiện điều này không? Để làm bash, hoặc có thể Terminal, lưu trữ chúng riêng biệt?


Vui lòng xem bài đăng này @ Server Fault, nó giải thích cách thực hiện việc này.
Mutant

Câu trả lời:


7

Bạn có thể làm một cái gì đó như thế này trong .bashrc:

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

Điều này sẽ tạo các tệp lịch sử riêng biệt trong thư mục nhà của bạn như .bash_history_ttys002. Khi bạn tạo một cửa sổ đầu cuối mới, nó sẽ sử dụng tệp lịch sử tương ứng với tên tty, thường sẽ được xác định đơn giản theo thứ tự mà bạn tạo các cửa sổ đầu cuối.


Cảm ơn rất nhiều! Đánh dấu điều này là giải quyết. Mặc dù nó phụ thuộc vào cách OSX tải các thiết bị đầu cuối mà tôi có cảm giác đây là thứ gần nhất chúng ta có thể nhận được.
Robert Sköld

Đây cũng có thể là mỗi tab ??
Joshua Muheim

Mỗi tab là một đăng nhập tty riêng biệt, vì vậy nó sẽ hoạt động.
Seth Noble

Terminal có hỗ trợ rõ ràng cho loại hành vi này: khi tạo một thiết bị đầu cuối mới, nó gán cho thiết bị đầu cuối một ID duy nhất và truyền nó đến phiên cuối thông qua biến môi trường TERM_SESSION_ID. Khi khôi phục thiết bị đầu cuối để Tiếp tục, nó cũng khôi phục cùng một ID phiên để các chương trình có thể sử dụng điều này để liên kết trạng thái tùy ý với các thiết bị đầu cuối được khôi phục. Sử dụng này như là một phần của tên tập tin thay vì tty.
Chris Trang

@ChrisPage vấn đề với điều này là phiên khác nhau mỗi khi bạn khởi chạy một cửa sổ / tab. Vì vậy, nó sẽ tạo ra lịch sử riêng biệt và không liên kết chúng qua các phiên.
Rene Wooller

5

Tôi đã thực hiện điều này bằng cách thêm

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

vào ~/.bash_profiletập tin của tôi Bây giờ khi tôi đóng terminal và mở lại, mỗi tab có lịch sử lệnh riêng được khôi phục. Ngoài ra khi tôi tạo tab mới, lịch sử mặc định được khởi tạo từ.bash_history

Ngoài ra, để tạo Terminalứng dụng để duy trì các tab đã mở giữa thoát và khởi động lại, bạn cần đảm bảo rằng tùy chọn đó đã "close windows when quitting app" (on Yosemite)bị tắt System Preferences -> General.


0

Bạn có thể đặt $ HISTFILE tùy chỉnh cho mỗi phiên bản Terminal của bạn.


Có cách nào để làm điều này tự động cho mỗi tab / cửa sổ Terminal không? Và chắc chắn rằng nó sử dụng tương tự $HISTFILEkhi máy tính khởi động lại?
Robert Sköld

1
Vâng, bạn có thể làm điều này, nhưng sau đó bạn sẽ truy cập lại bằng cách nào? Theo cách thủ công, bạn phải sắp xếp các tệp để đến các tệp lịch sử trước đó.
EmmEff

@EmmEff Terminal có hỗ trợ rõ ràng cho loại hành vi này: khi tạo một thiết bị đầu cuối mới, nó gán cho thiết bị đầu cuối một ID duy nhất và truyền nó đến phiên cuối thông qua biến môi trường TERM_SESSION_ID. Khi nó khôi phục một thiết bị đầu cuối để Tiếp tục, nó cũng khôi phục cùng một ID phiên để các chương trình có thể sử dụng điều này để liên kết trạng thái tùy ý với các thiết bị đầu cuối được khôi phục.
Chris Trang
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.