Perluas subkulit sebelum menjalankannya?


11

Saya sering menjalankan perintah menggunakan subshell, dan kadang-kadang ingin memiliki subshell diperluas sebelum saya menjalankan sesuatu .. Dengan cara ini saya bisa memverifikasi apa yang saya lakukan, dan mungkin mengedit apa yang akan terjadi juga.

Misalnya, bagaimana saya bisa mendapatkan baris perintah berikut untuk diperluas sebelum saya menjalankannya, jadi saya bisa mengedit hasil subkulit?

misalnya

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

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

Saya ingin melihat subkulit diperluas sebelum saya menjalankan perintah, seperti:

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

Apakah ada cara untuk melakukan ini?


1
zsh bisa melakukan ini, tapi aku cukup yakin pasti tidak bisa. Di zsh jika Anda memiliki kursor pada parameter, dan tekan TAB, itu akan memperluasnya
Patrick

Saya telah beralih ke zshdan itu bagus dan melakukan ini, seperti yang Anda sarankan ... tip yang bagus! Saya akan meninggalkan jawaban asli di sini, karena itu adalah bashpertanyaan.
Brad Parks

Jawaban:


5

shell-expand-line( \e\C-e) memperluas penggantian perintah di bash.

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

$(!!)\e\C-e akan menjalankan perintah sebelumnya lagi dan masukkan hasilnya:

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

Ini juga memperluas penggantian perintah lainnya, tetapi tidak ada perintah seperti shell-expand-word.

Di bash 4.0 atau lebih baru Anda juga bisa mengaktifkan globstar, mengetik **/file.txt, dan menggunakan glob-complete-word( \eg) atau glob-expand-word( \C-x*).


2

Berikut ini adalah trik praktis - tambahkan baris ini ke ~ / .inputrc (membuat file jika perlu):

Control-x: shell-expand-line

Perhatikan bahwa Anda juga dapat melakukan salah satu dari yang berikut untuk hanya memperluas riwayat, atau alias Anda, atau keduanya:

Control-x: history-expand-line

atau

Control-x: alias-expand-line

atau

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

Ini diperoleh dari blog ini , dan pertanyaan tentang SuperUser ini , yang sangat mirip:

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.