Rozwiń podpowłokę przed jej uruchomieniem?

11

Często uruchamiam polecenia za pomocą podpowłoki, a czasem chciałbym rozszerzyć podpowłoki, zanim coś uruchomię. W ten sposób mogę zweryfikować to, co robię, i ewentualnie edytować to, co się wkrótce wydarzy.

Na przykład, jak mogę uzyskać rozwinięcie następującego wiersza polecenia, zanim go uruchomię, aby móc edytować wyniki podpowłoki?

na przykład

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

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

Chciałbym zobaczyć rozwinięcie podpowłoki przed uruchomieniem polecenia:

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

Czy jest jakiś sposób, aby to zrobić?

Brad Parks
źródło
1
zsh może to zrobić, ale jestem całkiem pewien, że bash nie. W Zsh, jeśli najedziesz kursorem na parametr i naciśniesz TAB, spowoduje jego rozwinięcie
Patrick
Od tego czasu przeszedłem na zshi jest świetnie i robi to, jak sugerujesz ... fajna wskazówka! Oryginalną odpowiedź zostawiam tutaj, ponieważ było to bashpytanie.
Brad Parks,

Odpowiedzi:

5

shell-expand-line( \e\C-e) rozwija podstawienia poleceń w bash.

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

$(!!)\e\C-e ponownie uruchomiłby poprzednie polecenie i wstawił dane wyjściowe:

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

Rozszerza także inne podstawienia poleceń, ale nie ma takich poleceń shell-expand-word.

W wersji bash 4.0 lub nowszej możesz także włączyć globstar, wpisać **/file.txti użyć glob-complete-word( \eg) lub glob-expand-word( \C-x*).

Lri
źródło
2

Oto przydatna sztuczka - dodaj ten wiersz do ~ / .inputrc (w razie potrzeby utwórz plik):

Control-x: shell-expand-line

Pamiętaj, że możesz również jedno z poniższych, aby rozwinąć tylko historię, swoje aliasy lub jedno i drugie:

Control-x: history-expand-line

lub

Control-x: alias-expand-line

lub

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

Zostało to zebrane z tego bloga i tego pytania na temat SuperUser , które jest bardzo podobne:

Brad Parks
źródło