Làm cách nào để sao chép lệnh đã nhập trước đó bằng tiện ích lịch sử mà không cần chạy lại?


14

Tôi có thể sử dụng historylệnh trên CentOS để lấy danh sách các lệnh đã nhập trước đó, tuy nhiên, nếu tôi làm một cái gì đó như : !372, lịch sử sẽ cố chạy lệnh được tham chiếu.

Tôi cần lệnh chạy trước đó để xuất hiện ở con trỏ hiện tại. Đây là một ví dụ:

[dev@home ~]$ previous_command_no_execute!372  

Câu trả lời:


25

Làm thế nào về, đặt điều này trên dòng lệnh của bạn:

$ !372

Sau đó nhấn ESCtiếp theo CTRL+E. Điều này sẽ tự động mở rộng trên dòng lệnh mà không thực sự chạy nó. (cũng mở rộng mọi thứ khác trên dòng, kể cả env vars)

Điều này chỉ hoạt động trên Bash, theo như tôi biết.


Vâng, đây là giải pháp chính xác.
centosnoob

1
Đối với một giải pháp trong zsh, nhấn tab sau khi gõ !372và nó sẽ mở rộng nó cho bạn.
Reid

10

Bạn có thể sử dụng Ctrlrvà sau đó nhập một số ký tự từ lệnh gốc, vd

(reverse-i-search)`/etc': sudo /etc/init.d/apache2 restart

Ở trên tôi đã gõ Ctrl-r /etcvà nó lấy sudo /etc/init.d/apache2 restartlệnh từ lịch sử


6

history | grep 372 Có nên làm việc không?

Biên tập:

Ngoài ra, bạn có thể làm một cái gì đó như echo !372 > /dev/clipđể đặt thư mục lệnh vào clipboard của bạn.


luôn làm việc cho tôi ...
voretaq7

không chỉ tìm thấy lệnh cụ thể trước đó chạy.
centosnoob

Sau đó, cả tôi và @ voretaq7 đều hiểu nhầm câu hỏi của bạn. Có lẽ bạn có thể rõ ràng hơn một chút?
MDMarra

@MDMarra Tôi đã cập nhật câu hỏi. Tôi hy vọng nó làm sáng tỏ thêm.
centosnoob

@centosnoob nhìn vào bản cập nhật của bạn và giả sử bảng điều khiển của bạn hỗ trợ chuột và sao chép-dán (và hiếm khi được trực tiếp trên bảng điều khiển kiểu thiết bị đầu cuối không có khả năng sao chép-dán ngày nay), giải pháp sao chép và dán thực sự ít đau đớn nhất . Chỉnh sửa lệnh kiểu vi như tôi đã nêu trong câu trả lời của mình là một tùy chọn khác, nhưng tôi là một người nhiệt tình và thậm chí tôi không sử dụng chỉnh sửa dòng lệnh vi-phong ...
voretaq7

4

MDMarra đã đưa ra cách dễ dàng ( history|grepvà sao chép / dán bằng môi trường máy tính để bàn của bạn, giả sử bạn có một cái). Tôi sẽ cung cấp những gì tôi gọi theo cách khó, hoạt động nếu bạn không có môi trường máy tính để bàn hoặc chuột.

Giả sử bạn đang chạy bash như vỏ của bạn:

$ set -o vi
$ ESC372k

(bây giờ bạn sẽ có lệnh bạn đã chạy 372 lệnh trước đây, trên dòng và bạn sẽ ở vichế độ lệnh theo kiểu. Chỉnh sửa như bạn muốn nếu bạn đang sử dụng ex/ vi)


Hấp dẫn. Điều đó dường như chỉ hoạt động nếu bạn có "set -o vi" chạy sớm. Có thể phải đặt nó trong hồ sơ bash hoặc một cái gì đó.
Matt

Đó là một trong những điều "Tôi luôn sử dụng vi, tại sao tôi không sử dụng vi liên kết để chỉnh sửa các dòng trong bash" những điều mà bạn nhận ra với một cú sốc. Phải mất một chút thời gian để làm quen, sau đó các ràng buộc kiểu emacs mà mọi người khác sử dụng đều cảm thấy kỳ lạ và vô dụng.
cjc

@Matt Có - bạn cần đặt chế độ chỉnh sửa thành chỉnh sửa vikiểu. Nó sẽ hoạt động ngay khi bạn set -o vivà sẽ hoạt động cho toàn bộ lịch sử của bạn (chế độ chỉnh sửa chỉ là giao diện cho lịch sử lệnh của shell và những thứ khác).
voretaq7

@cjc Tôi sử dụng vi làm biên tập viên lựa chọn của mình, nhưng tôi không sử dụng các ràng buộc kiểu vi để chỉnh sửa dòng lệnh của mình tương đương trong chế độ emacs có thể thân thiện hơn :).
voretaq7

4

Cách đơn giản nhất và nhanh nhất để làm những gì bạn muốn là chạy:

!372:p

theo sau Enter


0

Bạn đang trên một hệ thống máy tính để bàn hoặc máy chủ?

Trên hệ thống máy tính để bàn Kubfox của tôi với vỏ mở, nó hỗ trợ làm nổi bật bằng chuột. Tôi thường chỉ làm nổi bật văn bản bằng chuột và nhấp vào nút chuột giữa để dán nó vào. Điều đó có hiệu quả với bạn không?

Vì vậy, bạn có thể grep cho lệnh. Đánh dấu văn bản. Dán nó bằng nút chuột giữa, sau đó chỉnh sửa nó.

Có thể có một cách tốt hơn nhưng điều này làm việc cho tôi.


0

không có lệnh để tự động dán, nhưng bạn có thể nhớ bất kỳ lệnh nào vào trình chỉnh sửa để chỉnh sửa trước khi thực hiện. điều này có thể đạt được những gì bạn đang tìm kiếm, nhưng khi thoát lệnh sẽ thực thi vì vậy nếu bạn muốn hủy bỏ, bạn nên xóa bộ đệm chỉnh sửa trước khi thoát khỏi trình soạn thảo của mình.

fc -e vi 372 372

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.