lịch sử bash cho phiên hiện tại


15

Có thể tôi đang xem xét một cái gì đó nhưng có một cách để có được lịch sử bash hiện tại của bạn cho phiên hiện tại bạn đang sử dụng như

nếu tôi chạy

ssh host
$ pwd
$ ls
$ cd /tmp

Tôi chỉ muốn xem 3 lệnh đó và không có gì khác


bạn đã kiểm tra historylệnh chưa ??
Hackaholic

ya tôi biết historynhưng điều đó không chỉ cho phiên của tôi
Mike

Số tiền được lưu giữa các phiên được kiểm soát bởi biến shell SAVEHIST nếu tôi nhớ lại. Do đó, nếu số lượng lịch sử bạn đã lưu lần trước là ZERO, thì bạn sẽ nhận được lịch sử cho phiên shell hiện tại (nhưng tất nhiên không phải ở cấp độ phụ)
mdpc

@mdpc, bạn đang đọc tài liệu gì? Trong trang Bash man tôi không tìm thấy tài liệu tham khảo nào về SAVEHIST mà chỉ có HISTSIZEHISTFILESIZE.
tự đại diện

Câu trả lời:


15

Một cách đường vòng một chút:

history -a ~/current_history

Điều này sẽ lưu lịch sử bash chưa lưu của phiên hiện tại ~/current_history, sau đó bạn có thể xem.


điều này có thể hoạt động nhưng không xử lý nhiều phiên .. Tôi nghĩ rằng tôi có thể tạo một tệp tạm thời ngẫu nhiên để lưu trữ trong đó
Mike

1
@Mike sử dụng tên được kết nối với bộ vỏ PID, có lẽ ~/$$_history.
muru

4
Điều đáng chú ý là điều này sẽ không xóa lịch sử hoặc ảnh hưởng đến việc lưu lịch sử bình thường dưới bất kỳ hình thức nào! Tôi đã không chắc chắn cho đến khi tôi thử nghiệm nó. :)
NHDaly

Tôi thấy thuận tiện hơn khi chỉ cần history -aném nó cùng với lịch sử trước đó vào ~ / .bash_history ... có thể là một vấn đề nếu lịch sử của bạn dài hơn ngưỡng, đó là 1000 trên hệ thống centos7 và fedora 24 của tôi.
Ray Foss

0

Tôi gặp vấn đề là tôi muốn ghi hiện tại historyvào một tệp nhưng vẫn muốn các mục được ghi lại trong bash chínhhistory

Tôi đã giải quyết điều này bằng cách chỉ đính kèm tệp với cat:

history -a current-history
cat current-history >> .bash_history

-1

Sử dụng compđể so sánh toàn bộ lịch sử (bao gồm phiên Bash hiện tại) với lịch sử đã tồn tại trong .bash_historyvà chỉ in những dòng duy nhất cho phiên hiện tại - sẽ chỉ hiển thị các lệnh đã được thực thi kể từ khi bắt đầu shell Bash hiện tại

comm -23 <( history | cut -c 8- ) ~/.bash_history

Chỉnh sửa: như @Wildcard chỉ ra lệnh này không hoạt động đối với tất cả các bản phân phối comm. Tôi đã thử nghiệm điều này trên Mac OS.

Một biến thể của cùng một ý tưởng sử dụng diff:

diff <( history | cut -c 8- ) ~/.bash_history | sed -n 's/^< //pg'

Một suy nghĩ tốt, nhưng rất không đáng tin cậy trong các bài kiểm tra của tôi. commgiả định đầu vào được sắp xếp. Nhưng, chào mừng bạn đến với Stack Exchange! :)
tự đại diện

@Wildcard, cả hai mặt của đầu vào commđược sắp xếp vốn có trong ví dụ của tôi ở trên. Bạn đã chạy nó? Và nó không tạo ra lịch sử phiên Bash hiện tại của bạn?
Christian Kadner

Vâng, tôi đã làm, và không, nó đã không. Và không có, nội dung của ~/.bash_historykhông được sắp xếp; và cũng không phải là đầu ra của historysắp xếp tất cả một khi số dòng hàng đầu được loại bỏ. (Bên cạnh đó, commmong đợi đầu vào được sắp xếp theo từ vựng, không phải đầu vào được sắp xếp theo số.)
Wildcard

Đúng, tôi có nghĩa là cả hai đối số cho commlệnh trong ví dụ của tôi đều theo cùng một thứ tự, không phải là chúng được sắp xếp từ điển. Phiên bản FreeBSD commkhông yêu cầu đầu vào được sắp xếp theo từ vựng
Christian Kadner

Tôi đang sử dụng Mac OS X. Nó không có gì để làm với điều đó. Nhìn gần hơn, nó dường như là các lệnh đầu tiên từ lịch sử trong bộ nhớ, từ đó đã bị ghi đè trong tệp lịch sử bởi các shell khác thoát ra.
tự đại diện
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.