Làm thế nào để truy cập đối số thứ hai từ lệnh cuối cùng trong lịch sử?


11

Tôi đang bắt đầu tìm hiểu một số Regex, do đó tôi sử dụng lệnh này nhiều lần:

grep pattern /usr/share/dict/american-english 

Chỉ có phần thay đổi mẫu, vì vậy tôi phải viết biểu thức dài " / usr / share / dict / American-english " nhiều lần.

Ai đó đã nhận xét rằng có thể mở rộng một đối số của một lệnh từ lịch sử lệnh bằng cách nhập các tổ hợp ký tự khó hiểu thay vì biểu thức đầy đủ. Bạn có thể cho tôi biết những kết hợp nhân vật khó hiểu?


Đây là về đối số thứ hai hay đối số cuối cùng?
mikeerv

trong trường hợp này, cuộc tranh luận cuối cùng xảy ra là lần thứ hai, tôi đã không làm rõ sự khác biệt này.
Abdul Al Hazred

Trong trường hợp đó, bash, dash, zsh, mksh, và kshvỏ (ít nhất, mà tôi biết về) tất cả sẽ nhận ra $_arg cuối cùng thông số đặc biệt (một số làm như vậy chỉ trong chế độ tương tác, mặc dù) . Nó chỉ mở rộng như một biến : grep somepattern filename; grep otherpattern "$_". Bạn thường có thể thấy nội dung của nó trong đầu ra của set.
mikeerv

Câu trả lời:


23

Bạn có thể sử dụng <M-.>(hoặc <Esc>.nếu khóa Meta của bạn đang được sử dụng cho mục đích khác), nghĩa là Meta-dot (hoặc <esc> dot), trong đó Meta thường là phím Alt, để gọi lại đối số cuối cùng của lệnh trước đó. Vì vậy, trước tiên bạn sẽ gõ

$ grep foo /usr/share/dict/american-english

Và sau đó nếu bạn muốn grep cho thứ khác, bạn sẽ gõ

$ grep bar

Sau khi nhập một khoảng trắng và sau đó Esc.(nghĩa là, trước tiên hãy nhấn phím thoát và sau đó là phím dấu chấm):

$ grep bar /usr/share/dict/american-english

Bạn cũng có thể sử dụng một trong các cách sau:

$ grep bar !:2
$ grep bar !$

Trường hợp !:2!$có nghĩa là "đối số thứ hai" và "đối số cuối cùng" tương ứng.


Cái này dành cho bash và shell sử dụng readline sử dụng các ràng buộc emacs (mặc định): với editing-mode viset bạn cần thêm một ràng buộc ~/.inputrccho yank-last-argvà cho Zsh, bạn cần liên kết insert-last-word...
jasonwryan

@jasonwryan, nếu đó là arg cuối cùng bạn muốn, sau đó trong bất kỳ (tương tác) zsh , bash, ksh, mksh, hoặc dashvỏ bạn có thể chỉ cần sử dụng $_. Tuy nhiên, POSIXLY ràng buộc đã được đặt, ESC _khi nào set -o vicó hiệu lực.
mikeerv

@mikeerv Cảm ơn Mike, tôi phải bật lại nó cho khả năng tương thích ...
jasonwryan

@jasonwryan - không vấn đề gì - đây chỉ là thủ thuật bàn phím vỏ duy nhất mà tôi biết - Tôi không nhớ / cấu hình tất cả các phím tắt loại nhanh đó. Nếu bạn không phiền, khả năng tương thích với cái gì? Có một số chương trình bạn sử dụng mà nó khác nhau? Ồ, tôi cũng có thể nhớ ESC @letter cho _letterliên kết bí danh - nhưng chỉ vì tôi vẫn không thể tìm ra cách làm cho nó hoạt động với w / bsd editline.
mikeerv

@mikeerv Tôi liên kết nó theo cách đó sao cho giống nhau cho dù tôi đang sử dụng Bash hay Zsh (cả ở chế độ vi) hay trên máy có Bash ở chế độ Emacs (đó là một trong những ràng buộc tôi thực sự ham).
jasonwryan

2

Nói chung (với Bash) <Esc> N <Esc> .sẽ gọi lại đối số N'th từ lệnh trước vào dòng lệnh hiện tại (trong đó N dựa trên 0).

Đối với đối số thứ hai từ lệnh cuối cùng, đó sẽ là:

<Esc> 1 <Esc> .

Nếu bạn muốn đối số thứ ba, thì

<Esc> 2 <Esc> .

... và như thế.

Như những người khác đã đề cập, nếu bạn muốn đối số cuối cùng từ lệnh trước đó, có một lối tắt cụ thể cho điều đó chỉ trong:

<Esc> .

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.