Chạy một lệnh với đối số từ lệnh cuối cùng


34

Khi chạy các lệnh, đôi khi có thể bạn cần chạy một lệnh với đối số từ lệnh cuối cùng. Làm thế nào bạn có thể làm điều này?

Tất nhiên, ngoại trừ việc sử dụng các phím mũi tên và Delphím: ... DelDelDel... Del<new_command>.

Câu trả lời:


45

Ví dụ: nếu bạn chạy lệnh này:

mkdir long_path_here/new_dir

rất có thể bạn muốn đi trong thư mục được tạo gần đây. Bạn có thể làm điều này bằng cách sử dụng "phím tắt" tiếp theo:

  • cd Esc.- gõ cdvà sau khi nhấn Esctheo sau .(không cùng lúc). Nếu lệnh trước không có đối số, bạn sẽ nhận được lệnh trước đó.
  • cd !*- trong trường hợp này, bạn sẽ nhận được tất cả các đối số từ lệnh ưu tiên. Nếu lệnh trước không có đối số, bạn sẽ không nhận được gì.
  • cd Alt+ .- gõ cdvà sau khi nhấn Alt.(cùng một lúc). Trong thực tế, sử dụng cách này và tiếp tục nhấn .(không cần phát hành Alt), bạn sẽ nhận được đối số cuối cùng cho mọi lệnh từ lịch sử. Nếu một lệnh không có đối số, bạn sẽ nhận được lệnh đó.

Nói chung: <command> Esc.hoặc <command> !*hoặc <command> Alt+ ..


wow, bạn đã tiết kiệm cho tôi hàng trăm giờ tôi sẽ lãng phí trong vài năm tới
pranavk

32

Có một vài phím tắt nếu bạn muốn tất cả các đối số từ lệnh trước đó, hoặc chỉ đối số cuối cùng.

  • Đối với tất cả các đối số: <command> !*
  • Đối với chỉ đối số cuối cùng: <command> !$

Ví dụ:

ls foo/ bar/
ls !* # Gives the results of ls foo/ bar/

ls foo/ bar/
ls !$ # Gives the results of ls bar/

Nếu bạn muốn một đối số từ danh sách các đối số từ lệnh trước đó, bạn có thể sử dụng <command> !!:<argNumber>

Thí dụ:

ls foo/ bar/ baz/
ls !!:2 # Gives the results of ls bar/
ls foo/ bar/ baz/
ls !!:1 # Gives the results of ls foo/

2
Bạn chỉ cần một !trong phiên bản arg duy nhất, vd !:2. Giả sử bash mặc định.
belacqua

3
Bạn cũng có thể sử dụng !^thay thế !:1.
Paddy Landau

7

Được đề cập !*!$là một điều tốt, nhưng khi bạn cần làm một chút chỉnh sửa các phím tắt sẵn sàng giúp đỡ!

Chẳng hạn, thay vì vô số ... DelDelDel... Delbạn chỉ có thể nhấn Ctrl-a(nhảy đến đầu dòng) Alt+d(xóa đến cuối từ)

Để biết thêm thông tin man readlinevà tìm kiếm Default key bindings.


4

Để lấy nđối số th từ lệnh trước đó của bạn, nhập Alt+ n+ Alt_. Ví dụ: sau:

$ echo 1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10

echotheo sau Alt2Alt_sẽ cung cấp cho bạn điều này tại dấu nhắc tiếp theo:

$ echo 2

"Ảnh chụp màn hình" sau khi bạn nhấn Alt2là:

(arg: 2) echo

Bạn có thể lặp lại Alt_nhiều lần để có được nđối số thứ của các lệnh trước đó liên tiếp.

Một ý tưởng hữu ích khác là xác định bí danh r="fc -s". Sau đó, bạn có thể thực hiện thay thế lệnh:

$ echo 1
1
$ r echo=history
history 1
27755  history 1
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.