Xem một loạt các lịch sử bash


30

Các historylệnh liệt kê ra tất cả các lịch sử cho phiên hiện tại. Như:

1 ls 
2 cd /root
3 mkdir something
4 cd something
5 touch afile
6 ls
7 cd ..
8 rm something/afile
9 cd ..
10 ls
11 history

Nhằm mục quan tâm tìm kiếm, tôi có thể đường ống historyvới grepnhư

history | grep ls
1 ls
6 ls
10 ls

Tôi cũng có thể xem 3 lệnh cuối như:

history 3
11 history
12 history | grep ls
13 history 3

Nhưng làm thế nào để tôi có được một phạm vi cụ thể của lịch sử? Ví dụ như một cái gì đó như:

history range 4 7
4 cd something
5 touch afile
6 ls
7 cd ..

Bạn có thể liệt kê các xlệnh cuối cùng sau đó dẫn đến head.
Bratchley

@Bratchley: Vì thế tôi phải biết có bao nhiêu lệnh cuối cùng được thực hiện. Hãy xem xét điều này, tôi history | grep somethingcho thấy kết quả của các lệnh được đánh số 123 234 345trong lịch sử và tôi có thể không biết số lệnh cuối cùng được thực thi ( historytrong trường hợp này). Lệnh cuối cùng của tôi có thể được đánh số 400, 500 hoặc bất cứ điều gì. Vì vậy, trước tiên tôi phải kiểm tra số đó, tìm ra sự khác biệt, liệt kê các xlệnh cuối cùng và sau đó chuyển sanghead
Slartibartfast

Câu trả lời:


52

Thay vì history, bạn có thể sử dụng fc, cho phép bạn chọn phạm vi:

fc -l 4 7

4
Nó thậm chí chấp nhận số âm để đếm từ cuối, như thế nào fc -l -16 -10.
Franklin Yu

hmm, tự hỏi tại sao chúng ta cần một lệnh hoàn toàn mới thay vì chỉ tranh luận với lệnh thực tế ...
Ringo

10

Nếu bạn phải sử dụng lệnh history, hãy chuyển nó qua sed hoặc awk:

history | sed -n '10,20p'

history | awk 'NR >= 10 && NR <= 20'

Nếu không, câu trả lời của cuonglm là lựa chọn tốt hơn.


6
Vì chúng ta đang ở trong những lựa chọn thay thế tồi, một sự kết hợp headtailsẽ giải quyết vấn đề này theo một cách thậm chí ít thanh lịch hơn. Đối với phạm vi 10-> 25 bạn phải sử dụng history | head 25 | tail 15.
Aaron

1

Sử dụng lịch sử với một grep trên các số dòng xung quanh lệnh Tôi đang tìm kiếm hoạt động tốt nhất cho tôi.

Chẳng hạn, tôi đang tìm kiếm những gì tôi đã làm xung quanh ping mybox, ít nhất 20 dòng.

$ history | grep "ping mybox" 20325 ping mybox

Đó là dòng 20325vì vậy tôi chỉ cần grep các dòng bắt đầu bằng một số trong [20320..20339]phạm vi.

$ history | grep ^203[2-3][0-9]


(1) Bạn nói rằng nhiều hơn hoặc ít hơn 20, nhưng ví dụ của bạn cho thấy −5 và +14. (2) Điều này không phù hợp với tôi, vì số lịch sử dường như có không gian hàng đầu.
Scott
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.