Chọn các lệnh từ lịch sử bash


20

Nhấn nút lên là tẻ nhạt và tôi có thể bỏ lỡ lệnh tôi đang tìm kiếm. Vì vậy, khi gõ historyở thiết bị đầu cuối cung cấp cho tôi tất cả các lệnh tôi đã nhập trước đó, được lập chỉ mục thành một số. Có cách nào tôi có thể gọi số liên quan đến lệnh không?


bất kỳ tùy chọn tương tác hơn bây giờ? những lỗi này rất dễ xảy ra
matt

Câu trả lời:


31

Lịch sử bash có thể làm nhiều điều hữu ích, và tìm kiếm Strg-rmà Terry Wang đã đề cập là một trong những điều quan trọng trong số đó. Nhưng nó cũng có thể làm chính xác những gì bạn yêu cầu.

Bạn có thể làm lại lệnh trước với !!. Với điều này, bạn cũng có thể chỉnh sửa lệnh trước đó. Nếu ví dụ bạn quên lấy quyền root cho lệnh

apt-get install a-long-list-of-packages

bạn không phải gõ lại tất cả những điều đó một lần nữa. Thay vào đó chỉ cần gọi

sudo !!

Nếu bạn muốn thực hiện lại lệnh tại một vị trí cụ thể trong lịch sử của mình, bạn cũng có thể sử dụng !, ví dụ

!3

để thực hiện lại lệnh ở vị trí 3. Hãy lưu ý rằng điều này được tính từ đầu. Vì vậy, nếu bạn đang lưu trữ 500 lệnh trong lịch sử của mình, !1sẽ là "500 lệnh trước". Bạn cũng có thể sử dụng số âm. Ví dụ

!-2

sẽ thực hiện lại lệnh cuối cùng thứ hai.

Bạn cũng có thể thực hiện lại lệnh cuối cùng bắt đầu bằng một chuỗi như

!apt-

sẽ thực hiện lại dòng cuối cùng bắt đầu bằng "apt-". Nếu bạn muốn lệnh cuối cùng trong đó chuỗi xuất hiện ở bất kỳ đâu trong dòng, bạn có thể sử dụng một cái gì đó như

!?pt-ge

Có nhiều điều thú vị hơn lịch sử bash có thể làm. Chỉ để tạo ấn tượng về phạm vi khả năng rộng, bạn có thể truy cập cụ thể một tham số của lệnh từ lịch sử. Vì thế

!-5:3:p

sẽ in tham số thứ ba đến thứ năm từ lệnh cuối cùng.

EDIT: Liên quan đến nhận xét của Rudie bên dưới, với các cài đặt tiêu chuẩn, bản mở rộng lịch sử bash này thực sự được thực hiện trực tiếp. Nó có thể được mô tả tốt nhất như thế này: Một cuộc gọi như !-3được thay thế bằng shell bằng lệnh cuối cùng thứ ba từ lịch sử của bạn và sau đó đầu vào của bạn (với sự thay thế) được thực thi. Vì vậy, nếu bạn gõ !-3và nhấn ENTERvà lệnh cuối cùng thứ ba của bạn là ls ~, nó sẽ có hiệu lực giống như khi bạn gõ ls ~lại và nhấn ENTER"một mình".

Nếu bạn không muốn điều đó, bạn có thể đặt tùy chọn shell histverify. Để cài đặt và bỏ cài đặt tùy chọn shell, bạn có thể muốn đọc lên shoptlệnh. Với histverifythiết lập, một cuộc gọi như !-3chỉ ghi thay thế từ lịch sử của bạn vào dòng lệnh của bạn, nhưng không thực hiện trực tiếp. Bạn có, vì vậy để sinh ra, nhấn ENTERchính mình - hoặc kiềm chế nó, nếu bạn chọn.


Vì vậy, !khá nguy hiểm ... Tôi muốn biết !-4chính xác những gì đã làm trước khi chạy nó. Hay nó cho bạn thấy đầu tiên? Tóm tắt tuyệt vời!
Rudie

1
@Rudie Đó là một điểm tốt, tôi đã cập nhật câu trả lời của mình. Các tính năng lịch sử chủ yếu là để tăng tốc công việc của bạn và giúp bạn tiết kiệm tổ hợp phím. Vì vậy, một tiêu chuẩn "Bạn có thực sự, thực sự có nghĩa là?" ít nhất sẽ đánh bại một phần mục đích đó. Và mặc dù bạn có thể, thông thường bạn sẽ không gọi một lệnh "lùi xa" như thế nào !-238. Không quá khó để nhớ lần thứ hai cuối cùng, thứ ba cuối cùng, có thể là lệnh cuối cùng;) Như thường lệ với Linux (và thực tế, với máy tính nói chung), bạn sẽ biết rằng mình đang làm gì. Và nếu bạn thực sự muốn có mạng lưới an toàn bổ sung, thì đó là một mạng shopt;)
Henning Kockerbeck

16

Có, có. Ví dụ, nếu bạn muốn thực thi lệnh có số 1234 bên cạnh, hãy làm:

!1234

Những thứ hữu ích khác:

  • Nếu bạn muốn chạy lệnh cuối cùng bạn đã chạy, hãy làm:

    !!
  • Nếu bạn muốn chạy lslệnh cuối cùng bạn đã chạy, hãy làm:

    !ls
  • Nếu bạn vừa chạy ls /some/long/path, và bạn muốn cdnó, hãy làm:

    cd !$

Để biết thêm thông tin:



3

Nếu bạn đã tìm thấy số lịch sử của một lệnh và bạn muốn thực hiện lại nó, hãy nhập !theo sau là số, ví dụ !1234và nhấn Enter. Đây là một phần của việc mở rộng lịch sử ; bạn có thể giải quyết các sửa đổi trên nó.

Nếu bạn muốn chỉnh sửa lệnh trước khi chạy nó, hãy fc 1234gọi trình soạn thảo bên ngoài.

Nhưng như Terry Wang đã đề cập , thường có những cách nhanh hơn để định vị một lệnh trong lịch sử hơn là xác định số lịch sử của nó, bao gồm Ctrl+ Rđể gọi tìm kiếm gia tăng (nhấn Enterkhi bạn tìm thấy lệnh bạn muốn thực hiện) hoặc fc PREFIXthực hiện lệnh trước đó lệnh bắt đầu bằng PREFIX.


1

Các historylệnh sẽ hiển thị tất cả các lệnh và số liên quan của họ. Nếu bạn muốn kiểm tra nhanh trước khi thực hiện dòng lệnh # 135, bạn có thể nhập:

echo !135

Điều này sẽ cho bạn thấy những gì sẽ được thực hiệ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.