Espandere subshell prima di eseguirlo?


11

Eseguo spesso comandi usando subshells, e talvolta vorrei che i subshells fossero espansi prima di eseguire qualcosa. In questo modo ho potuto verificare quello che sto facendo e, eventualmente, modificare anche quello che sta per accadere.

Ad esempio, come posso ottenere l'espansione della seguente riga di comando prima di eseguirla, in modo da poter modificare i risultati della subshell?

per esempio

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

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

Vorrei vedere la subshell espansa prima di eseguire il comando, in questo modo:

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

C'è un modo per farlo?


1
zsh può farlo, ma sono abbastanza certo che bash non può. In zsh se hai il cursore sul parametro e premi TAB, lo espanderà
Patrick

Da allora sono passato zshed è fantastico e lo fa, come suggerisci ... bel consiglio! Lascio qui la risposta originale, poiché era una bashdomanda.
Brad Parks,

Risposte:


5

shell-expand-line( \e\C-e) espande le sostituzioni di comandi in bash.

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

$(!!)\e\C-e eseguirà nuovamente il comando precedente e inserirà l'output:

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

Espande anche altre sostituzioni di comandi, ma non esiste un comando simile shell-expand-word.

In bash 4.0 o versioni successive puoi anche abilitare globstar, digitare **/file.txte usare glob-complete-word( \eg) o glob-expand-word( \C-x*).


2

Ecco un trucco utile: aggiungi questa riga a ~ / .inputrc (creando il file se necessario):

Control-x: shell-expand-line

Si noti che è possibile anche una delle seguenti opzioni per espandere solo la cronologia, i propri alias o entrambi:

Control-x: history-expand-line

o

Control-x: alias-expand-line

o

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

Questo è stato raccolto da questo blog e da questa domanda su SuperUser , che è molto simile:

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.