Câu trả lời của tôi cung cấp một lệnh đơn giản theo ba cú pháp khác nhau, tất cả đều hoạt động như nhau, nhưng một cú pháp ngắn hơn và dễ gõ hơn so với cú pháp thứ hai. Biến thể thứ ba là một bí danh được gọi là bí danh, có nghĩa là bạn có thể gán cho lệnh một tên tùy chỉnh và gọi nó bằng cách thực hiện nó mà không cần phải nhớ những thứ phức tạp.
Chuẩn bị:
Đầu tiên, cài đặt gói xsel
cho phép bạn truy cập bảng tạm X từ thiết bị đầu cuối:
sudo apt-get install xsel
Biến thể lệnh 1 (ngắn):
Sau đó, bạn có thể nhập dòng sau để sao chép lệnh trước đó vào bảng tạm:
xsel -ib <<<!!:q
Nếu bạn muốn sao chép lệnh mới nhất thứ hai, hãy thay thế !!
bằng !-2
, cho lần sử dụng mới nhất thứ ba !-3
, v.v.
Để giải thích những gì bạn đang chạy, đây là một sự cố ngắn của lệnh:
xsel
là một công cụ dòng lệnh để truy cập các bảng X.
Để biết thêm thông tin, hãy đọc trang này trực tuyến hoặc bằng cách chạy man xsel
.
- Các
-i
tham số kể xsel
để đọc từ stdin (thường là đầu vào phương tiện bàn phím này, nhưng chúng ta sẽ chuyển hướng một cái gì đó ở đây)
- Các
-b
quy định cụ thể thông số để sử dụng clipboard thay vì X "chính" hoặc lựa chọn "phụ".
<<<
là một cú pháp Bash đặc biệt gọi là "Here String".
Về cơ bản, nó mở rộng (không đánh giá!) Đối số (chỉ có một!) Sau nó và chuyển hướng nó thành chuỗi thành stdin (đầu vào tiêu chuẩn) của lệnh trước / sau khi nó đứng.
!!:q
được gọi là "lệnh bang" để mở rộng lịch sử trong bash. Nó thay thế chính nó bằng bất kỳ dòng lệnh đã gõ trước đó.
Để biết thêm thông tin, hãy đọc trang web địa phương bằng cách chạy man history
(trang web trực tuyến không hữu ích).
- Chữ
!!
viết tắt của dòng lệnh trước đó và là từ đồng nghĩa với !-1
.
Rõ ràng !-2
có nghĩa là dòng lệnh cuối cùng thứ hai. Đừng quên dấu trừ -
, nếu không nó sẽ trả về lệnh thứ 2 (thứ 3 / ...) mà bạn đã từng gõ.
- Việc
:q
sửa đổi lệnh bang và yêu cầu bash kèm theo sự thay thế trong dấu ngoặc đơn ( '
) để ngăn chặn sự mở rộng thêm của shell.
Biến thể lệnh 2 (dài hơn một chút):
echo !!:q | xsel -ib
echo
có công việc đơn giản là in tất cả các đối số của nó lên thiết bị xuất chuẩn của thiết bị đầu cuối.
!!:q
được gọi là "lệnh bang" để mở rộng lịch sử trong bash. Nó thay thế chính nó bằng bất kỳ dòng lệnh đã gõ trước đó.
- Chữ
!!
viết tắt của dòng lệnh trước đó và là từ đồng nghĩa với !-1
. Rõ ràng !-2
có nghĩa là dòng lệnh cuối cùng thứ hai. Đừng quên dấu trừ -
, nếu không nó sẽ trả về lệnh thứ 2 (thứ 3 / ...) mà bạn đã từng gõ.
- Việc
:q
sửa đổi lệnh bang và yêu cầu bash kèm theo sự thay thế trong dấu ngoặc đơn ( '
) để ngăn chặn sự mở rộng thêm của shell.
|
là một đường ống. Nó chuyển hướng đầu ra đầu cuối ("stdout") của lệnh trước khi nó đến đầu vào đầu cuối ("stdin") của lệnh sau nó.
xsel
là một công cụ dòng lệnh để truy cập các bảng X.
Để biết thêm thông tin, hãy đọc trang này trực tuyến hoặc bằng cách chạy man xsel
.
- Các
-i
tham số kể xsel
để đọc từ stdin (thường là đầu vào phương tiện bàn phím này, nhưng chúng ta sẽ chuyển hướng một cái gì đó ở đây)
- Các
-b
quy định cụ thể thông số để sử dụng clipboard thay vì X "chính" hoặc lựa chọn "phụ".
Biến thể lệnh 3 (bí danh):
Bí danh bash là một điều tuyệt vời nếu bạn không muốn nhớ các lệnh dài hoặc phức tạp bạn thường sử dụng. Bạn có thể gán lệnh này cho một tên bí danh đơn giản, bạn có thể chạy thay vì lệnh dài để đạt được điều tương tự.
Thật không may, vì các lệnh bang là một tính năng Bash đặc biệt và được mở rộng trước khi các bí danh được giải quyết, bạn không thể đơn giản là một trong những biến thể ở trên vì !!
phần này sẽ không hoạt động. Có một cách giải quyết mặc dù.
Để đặt bí danh, hãy chạy dòng sau trong thiết bị đầu cuối của bạn. Lưu ý rằng bạn có thể chọn bất kỳ tên biến Bash hợp lệ nào thay vì copylastcommand
:
alias copylastcommand='history -p \!\! | xsel -ib'
Tuy nhiên, điều này chỉ tồn tại trong phiên Bash hiện tại của bạn, điều đó có nghĩa là bí danh sẽ biến mất sau khi bạn đóng cửa sổ terminal. Bạn có thể làm cho nó bền bỉ trong mỗi phiên Bash của bạn bằng cách thêm dòng này ở trên vào cuối ~/.bashrc
tệp của bạn hoặc vào ~/.bash_aliases
tệp của bạn nếu bạn có.
Một lần nữa, một sự cố ngắn của dòng:
alias name='command'
là cú pháp để đặt bí danh trong Bash. Các command
sẽ được chạy bất cứ khi nào bạn thực hiện name
từ bây giờ.
history -p \!\!
xuất dòng lệnh đã thực hiện trước đó thành thiết bị xuất chuẩn (đầu ra tiêu chuẩn). Không có công -p
tắc, nó không chỉ in mà còn chạy lại lệnh.
Lưu ý rằng chúng ta cần thoát khỏi bangs ( !
) bằng dấu gạch chéo ngược ( \
), vì nếu không, bash sẽ mở rộng chúng khi chúng ta cố gắng đặt bí danh, điều này không có nghĩa gì khi chúng cần nằm trong bí danh.
Một lần nữa, bạn cũng có thể chỉ định lệnh gần đây [n] bằng cách thay thế tiếng nổ thứ hai bằng -n
, ví dụ \!-2
.
|
là một đường ống. Nó chuyển hướng đầu ra tiêu chuẩn ("stdout") của lệnh trước khi nó tới tiêu chuẩn đầu cuối ("stdin") của lệnh sau nó.
xsel
là một công cụ dòng lệnh để truy cập các bảng X.
Để biết thêm thông tin, hãy đọc trang này trực tuyến hoặc bằng cách chạy man xsel
.
- Các
-i
tham số kể xsel
để đọc từ stdin (thường là đầu vào phương tiện bàn phím này, nhưng chúng ta sẽ chuyển hướng một cái gì đó ở đây)
- Các
-b
quy định cụ thể thông số để sử dụng clipboard thay vì X "chính" hoặc lựa chọn "phụ".
<<<"!!" xsel -ib