Mở rộng subshell trước khi thực hiện nó?


11

Tôi thường chạy các lệnh bằng cách sử dụng các lớp con và đôi khi muốn mở rộng các lớp con trước khi tôi chạy một cái gì đó .. Bằng cách này tôi có thể xác minh những gì tôi đang làm và có thể chỉnh sửa những gì sắp xảy ra.

Ví dụ, làm thế nào tôi có thể mở rộng dòng lệnh sau trước khi chạy nó, vì vậy tôi có thể chỉnh sửa kết quả của lớp con?

ví dụ

$ find -name "test.txt" 
/tmp/test.txt

$ mv $(!!) /tmp/new.txt

Tôi muốn thấy subshell được mở rộng trước khi tôi chạy lệnh, như vậy:

$ mv /tmp/test.txt /tmp/new.txt

Có cách nào để làm việc này không?


1
zsh có thể làm điều này, nhưng tôi khá chắc chắn bash không thể. Trong zsh nếu bạn có con trỏ trên tham số và nhấn TAB, nó sẽ mở rộng nó
Patrick

Tôi đã chuyển sang zshvà thật tuyệt và làm điều này, như bạn đề xuất ... mẹo hay! Tôi sẽ để lại câu trả lời ban đầu ở đây, vì đó là một bashcâu hỏi.
Brad park

Câu trả lời:


5

shell-expand-line( \e\C-e) mở rộng thay thế lệnh trong bash.

$ bind -p|grep shell-ex
"\e\C-e": shell-expand-line

$(!!)\e\C-e sẽ chạy lại lệnh trước đó và chèn đầu ra:

"\eo": "$(!!)\e\C-e"

Nó cũng mở rộng các thay thế lệnh khác, nhưng không có lệnh như thế nào shell-expand-word.

Trong bash 4.0 trở lên, bạn cũng có thể bật globstar, nhập **/file.txtvà sử dụng glob-complete-word( \eg) hoặc glob-expand-word( \C-x*).


2

Đây là một mẹo hữu ích - thêm dòng này vào ~ / .inputrc (tạo tệp nếu cần):

Control-x: shell-extend-line

Lưu ý rằng bạn cũng có thể chỉ một trong những điều sau đây để mở rộng lịch sử hoặc bí danh của mình hoặc cả hai:

Control-x: history-extend-line

hoặc là

Control-x: bí danh-mở rộng dòng

hoặc là

Control-x: history-and-alias-extend-line

Điều này đã được lượm lặt từ blog nàycâu hỏi này trên SuperUser , rất giống nhau:

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.