2013-08-15 13 views
5

Tại bất kỳ thời điểm nào, tôi có 3 lần đăng nhập vào cùng một máy chủ. Chắc chắn, tôi thường sử dụng màn hình, nhưng giả sử mục đích này cho phép tôi có:kết hợp lịch sử trên tty

1 session running something 
1 session looking at output 
1 session shuffling files to/from various places 

Nếu tại bất kỳ điểm nào tôi mất tất cả ba kết nối, tôi mất 2/3 lịch sử, như khi tôi đăng nhập lại, tôi có được lịch sử từ ngẫu nhiên 1 trong ba kết nối của tôi.

Có cách nào để dừng việc này và kết hợp cả ba tệp lịch sử vào 1 không?

Ngoài ra, có cách nào để khai báo mỗi lần đăng nhập là "ttyN" do đó giữ mỗi lần đăng nhập riêng biệt, nhưng có thể truy xuất/kết nối lại được không?

Cảm ơn!

+0

Bạn cần lịch sử của mình để làm gì? Một giải pháp cho vấn đề của bạn dường như không tầm thường để làm từ đầu ... – Dru

+0

Bạn có thể xác định tên của tệp lịch sử mà bash phải sử dụng. Các tập tin được writtten khi thoát khỏi quá trình bash. (Nhưng tôi không bao giờ sử dụng nó.) Sử dụng này, bạn có thể có 3 tập tin lịch sử khác nhau miễn là bạn bắt đầu bash của bạn với các cài đặt khác nhau của 'HISTFILE' – tue

Trả lời

-1

Có rất nhiều tùy chọn bạn có thể đặt để ngăn trường hợp Bash ghi đè lên lịch sử của mỗi người khác. Xem this FAQ cho một lời giải thích đầy đủ:

Trong .bashrc của bạn, thêm

HISTFILESIZE=400000000 
HISTSIZE=10000 
PROMPT_COMMAND="history -a" 
export HISTSIZE PROMPT_COMMAND 
shopt -s histappend 
+0

Có vẻ như không hoạt động. Tôi chèn nó vào .bashrc, khởi động lại (cần thiết để làm như vậy anyway), và đăng nhập lại, lệnh tty từ phiên 2 không có trong lịch sử của phiên 1. Và ngược lại. –

+0

Điều này chỉ ngăn các shell khác ghi đè lên tệp lịch sử. Nó không làm cho lịch sử từ một shell đang chạy có sẵn trong một shell khác trong thời gian thực. Nếu bạn đóng cả hai trình bao theo thứ tự tùy ý và bắt đầu một thứ ba, bạn sẽ thấy rằng lịch sử từ cả hai đều có sẵn trong thứ ba, trái ngược với chỉ một cái trước khi bạn bắt đầu. –

1

giải pháp có thể xảy ra?

Sau khi bạn đã mở của bạn Terminal/Screen

bắt đầu shell của bạn với một cài đặt Lịch sử-File:

HISTFILE=$HOME/session1-history bash 

và tiếp tục làm việc với bash này. Để chạy một lịch sử phiên khác nhau

HISTFILE=$HOME/session2-history bash 

, vv

0

Nếu tôi đã hiểu yêu cầu của bạn ngay bạn có nhiều phiên terminal mở và muốn các lệnh nhập vào một phiên sẽ có sẵn thông qua lịch sử trong buổi khác.

Bạn cần phải đặt những dòng trên đầu trang của ~/.bashrc của bạn:

export HISTFILESIZE=100000 
export HISTSIZE=100000 
# avoid & erase dups 
export HISTCONTROL=ignoredups:erasedups 
shopt -s histappend 
# save & reload history after each command enter in shell 
export PROMPT_COMMAND="\history -a; \history -c; \history -r; $PROMPT_COMMAND" 

Quan trọng nhất là histappend mà làm cho chắc chắn rằng dòng lịch sử mới sẽ được nối vào tập tin lịch sử mỗi lần.

PS: Bạn cần nhấn enter để xem lịch sử được thêm gần đây nhất trong mỗi phiên.

Đối với giải pháp mạnh mẽ hơn see: http://ptspts.blogspot.in/2011/03/how-to-automatically-synchronize-shell.html

0

Chỉ cần thêm này trong tập tin .bashrc của bạn.

# Avoid duplicates.. 
export HISTCONTROL=ignoredups:erasedups 

# Append history entries.. 
shopt -s histappend  

# After each command, save and reload history 
export PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND$'\n'}history -a; history -c; history -r" 

Tìm thấy câu trả lời tại số Unix Stackexchange post này.

Tôi đã thử điều này và có vẻ như hoạt động trên nhiều thiết bị đầu cuối đồng thời, chỉ bắt được là bạn đã thực hiện lệnh cho thiết bị đầu cuối để tìm nạp lịch sử mới nhất từ ​​.bash_history.

Ví dụ: nếu tôi mở thiết bị đầu cuối đầu tiên và nhập echo check 1 và sau đó mở thiết bị đầu cuối thứ hai và nhập echo check 2.Bây giờ nếu tôi quay trở lại thiết bị đầu cuối đầu tiên và bấm phím lên, tôi sẽ không nhận được echo check 2, kể từ lần cuối cùng lịch sử được tìm nạp từ tệp lịch sử là khi tôi thực hiện lệnh trước đó. Vì vậy, tôi chỉ có thể nhấn Enter mà không chỉ định một lệnh và nó sẽ tìm nạp các mục lịch sử cuối cùng. Bây giờ nếu tôi bấm phím lên, nó sẽ hiển thị echo check 2, đó là hành vi mong đợi.

1

Có trình ghi nhật ký lịch sử trình nguồn mở cho bash và zsh sẽ giải quyết vấn đề của bạn (tuyên bố từ chối trách nhiệm: tôi đã viết và duy trì nó).

https://github.com/barabo/advanced-shell-history

Ý tưởng là lệnh của bạn được viết thành một cơ sở dữ liệu sqlite3 sử dụng một cái móc bash dựng sẵn. Nếu bạn thực sự cần quay lại và tìm ra lệnh nào bạn đã nhập/thời gian họ chạy/mã thoát của họ là gì - bạn nên thử.

Nó đã lưu tôi nhiều lần.

Các vấn đề liên quan