Thiết bị đầu cuối thay thế! theo sau là một số với một lệnh


12

Tôi rất bối rối về phiên thiết bị đầu cuối Ubuntu của mình, nó dường như thay thế các phần trong các lệnh bắt đầu !bằng một số bằng các lệnh dường như ngẫu nhiên. Nó làm điều đó với việc !87thay thế nó bằng screen -lvà cũng với !88và thay thế nó bằng ls.

Bất kỳ ý tưởng tại sao điều này đang xảy ra sẽ được nhiều đánh giá cao.


Câu trả lời:


20

Đó là bashsự mở rộng lịch sử, vd

!87

thực hiện lại lệnh từ dòng lịch sử 87.

Bạn tìm thấy mô tả về tính năng này trong man bashphần mục LỊCH SỬ MỞ RỘNG:

       An  event  designator  is  a  reference  to a command line entry in the
       history list.  Unless the reference is absolute, events are relative to
       the current position in the history list.

       !      Start  a  history substitution, except when followed by a blank,
              newline, carriage return, = or ( (when the extglob shell  option
              is enabled using the shopt builtin).
       !n     Refer to command line n.
       !-n    Refer to the current command minus n.

Vì vậy, để nhanh chóng gọi lệnh cuối cùng, hãy làm !-1và cho lệnh cuối cùng thứ năm !-5. Một từ đồng nghĩa tiện dụng cho !-1!!- nếu bạn gọi ví dụ apt install somethingvà quên sudo, chỉ cần thực hiện sudo !!và bạn tốt.

Chỉ dấu gạch chéo ngược ( \ ) và dấu ngoặc đơn mới có thể trích dẫn ký tự mở rộng lịch sử.

Để tránh mở rộng lịch sử, bạn cần thoát dấu chấm than bằng dấu gạch chéo ngược ( \!) hoặc sử dụng dấu ngoặc đơn ( '!').


3
để truyền đạt một kiến ​​thức !cho các lệnh của bạn và tránh mở rộng lịch sử, bạn sẽ cần trích dẫn đơn hoặc thoát chúng: foo '!87'hoặc foo \!87. (trích dẫn kép cũng sẽ thực hiện việc mở rộng nội dung của chúng.)
quixotic
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.