Alt kabuk yürütülmeden önce genişletilsin mi?


11

Sık sık alt kabukları kullanarak komutları çalıştırıyorum ve bazen bir şey çalıştırmadan önce alt kabukların genişlemesini istiyorum.

Örneğin, çalıştırmadan önce aşağıdaki komut satırının genişletilmesini nasıl sağlayabilirim, böylece alt kabuğun sonuçlarını düzenleyebilirim?

Örneğin

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

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

Komutu çalıştırmadan önce alt kabuğun genişlediğini görmek istiyorum , şöyle:

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

Bunu yapmanın bir yolu var mı?


1
zsh bunu yapabilir, ama bash'ın yapamayacağından oldukça eminim. Eğer imlecinizi parametreye getirdiyseniz ve SEKME tuşuna basarsanız, onu genişletir
Patrick

O zamandan beri geçtim zshve harika ve bunu önerdiğin gibi yapıyor ... güzel ipucu! Asıl cevabı burada bırakacağım, çünkü bu bir bashsoruydu.
Brad Parks

Yanıtlar:


5

shell-expand-line( \e\C-e), bash içindeki komut değişikliklerini genişletir.

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

$(!!)\e\C-e önceki komutu tekrar çalıştırır ve çıktıyı ekler:

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

Ayrıca diğer komut ikamelerini de genişletir, ancak böyle bir komut yoktur shell-expand-word.

Bash 4.0 veya sonraki sürümlerde ( ) veya ( ) özelliğini de etkinleştirebilir globstar, yazabilir **/file.txtve kullanabilirsiniz .glob-complete-word\egglob-expand-word\C-x*


2

İşte kullanışlı bir numara: ~ / .inputrc dosyasına bu satırı ekleyin (gerekirse dosyayı oluşturma):

Control-x: kabuk-genişletme çizgisi

Yalnızca geçmişi genişletmek için aşağıdakilerden birini veya takma adlarınızı ya da her ikisini birden yapabileceğinizi unutmayın:

Control-x: geçmiş-genişletme çizgisi

veya

Ctrl-x: diğer ad-genişletme çizgisi

veya

Control-x: geçmiş ve takma ad genişletme çizgisi

Bu blogdan ve SuperUser'daki bu sorudan çok benzeyen bir soru :

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.