Tôi có thể dễ dàng tìm kiếm lịch sử của mình trên nhiều cửa sổ màn hình không?


11

screenPhiên hiện tại của tôi có 12 cửa sổ đang mở. Nó đã chạy trong nhiều tuần ... Tôi biết rằng tôi đã thực thi convertlệnh ImageMagick trong một trong 12 cửa sổ màn hình này vào tuần trước ... có cách nào tôi có thể dễ dàng tìm kiếm trong lịch sử Bash của tất cả 12 trường hợp, mà không cần đóng hoặc chạy history | grep converttrong tất cả 12 màn hình?


1
Tôi sử dụng Zsh và tôi có setopt share_historytrong /etc/zsh/zshrcquá vấn đề này bao giờ nên xảy ra với tôi: P
phunehehe

Câu trả lời:


18

Bạn có thể chạy history -a; history -ctrong tất cả các cửa sổ để lưu lịch sử. Và sau đó history -rđể làm mới nó.

Để giải quyết vấn đề này vĩnh viễn, hãy thêm cái này vào .bashrc:

export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"

2
Điều này thật tuyệt, cảm ơn! Vấn đề duy nhất là nếu bạn gõ một cái gì đó trong một vỏ và sau đó đi đến một cái khác và gõ lịch sử ngay lập tức, nó sẽ không hiển thị trong lịch sử. Điều này là do PROMPT_COMMAND chưa được thực thi, do đó việc làm mới chưa xảy ra. Bạn sẽ phải quay trở lại trong cửa sổ thứ hai (hoặc chạy lệnh khác) trước, sau đó nhập lịch sử.
Javid Jamae

1

Nghe có vẻ khó. Dưới đây là một vài phương pháp có thể phù hợp với bạn.

Nếu bạn đã cài đặt các công cụ kế toán (trên Linux, hãy tìm gói được gọi acct) và quyền sử dụng chúng, bạn có thể tìm hiểu khi nào và có thể trên thiết bị đầu cuối nào bạn đã chạy convert:

lastcomm convert

Nếu điều này không có sẵn hoặc không có kết luận, bạn có thể thực thi một historylệnh trong mỗi trường hợp bash để tìm kiếm convertcác lệnh. Điều này sẽ tìm thấy các lệnh trong tệp lịch sử khi bash cũng bắt đầu.

: >/tmp/convert.history
for w in $(seq 0 11); do
  screen -p $w -X stuff \
    'history | sed 's/^.*convert/'$w'&/" >>/tmp/convert.history
'; done
  • $(seq 0 11)lặp đi lặp lại qua số lượng cửa sổ màn hình của bạn. Đảm bảo bỏ qua các cửa sổ hiện không chạy bash nhưng một số quy trình khác sẽ diễn giải đầu vào khác nhau.
  • screen -p $w stuff …gửi chuỗi sau đây làm đầu vào cho cửa sổ đã chỉ định. Bạn cần dòng mới ở cuối chuỗi.
  • Tệp /tmp/convert.historysẽ chứa danh sách các dòng như 3 convert foo.jpg, nếu bạn chạy convert foo.jpgtrong cửa sổ 3.

1
Thật không may, chúng không hoạt động. :-( Tôi vừa mới chạy history | grep converttrong tất cả các cửa sổ. Tôi thất vọng, tôi muốn chấp nhận một câu trả lời tuyệt vời khác của Gilles!
Josh

1

tcsh cho phép bạn chia sẻ lịch sử giữa các phiên thông qua việc sử dụng bí danh định kỳ.

Trong tệp .cshrc (hoặc .tcshrc) của bạn:

set tperiod = 60 #(or any other number.  Time in minutes between refreshing)
alias periodic 'history -S; echo "Syncing history"'

Điều này sẽ tự động thực hiện lệnh lịch sử cứ sau 60 phút. Điều này sẽ lưu lịch sử vào một tệp lịch sử phổ biến trong thư mục nhà của bạn. Để cập nhật lịch sử thường xuyên hơn, hãy hạ thấp số chu kỳ hoặc chỉ cần thực hiện lệnh "định kỳ" để làm mới thủ công


0

Bash chỉ viết lịch sử khi nó thoát ra, điều này làm cho vấn đề này trở nên tốt nhất. Tôi đã nghe nói rằng zsh có thể chia sẻ lịch sử giữa các phiên hoạt động.

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.