Ampliar subshell antes de ejecutarlo?

11

A menudo ejecuto comandos usando subshells, y a veces me gustaría expandir los subshells antes de ejecutar algo. De esta manera podría verificar lo que estoy haciendo y posiblemente editar lo que está por suceder también.

Por ejemplo, ¿cómo puedo ampliar la siguiente línea de comando antes de ejecutarla, para poder editar los resultados de la subshell?

p.ej

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

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

Me gustaría ver la subshell expandida antes de ejecutar el comando, así:

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

Hay alguna manera de hacer esto?

Brad Parks
fuente
1
zsh puede hacer esto, pero estoy bastante seguro de que bash no puede. En zsh si tiene el cursor sobre el parámetro y presiona TAB, lo expandirá
Patrick
Desde entonces he cambiado zshy es genial y hace esto, como sugieres ... ¡buen consejo! Dejaré la respuesta original aquí, ya que era una bashpregunta.
Brad Parks

Respuestas:

5

shell-expand-line( \e\C-e) expande las sustituciones de comandos en bash.

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

$(!!)\e\C-e volvería a ejecutar el comando anterior e insertaría la salida:

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

También expande otras sustituciones de comandos, pero no hay comandos como shell-expand-word.

En bash 4.0 o posterior también puede habilitar globstar, escribir **/file.txty usar glob-complete-word( \eg) o glob-expand-word( \C-x*).

Lri
fuente
2

Aquí hay un truco útil: agregue esta línea a ~ / .inputrc (creando el archivo si es necesario):

Control-x: shell-expand-line

Tenga en cuenta que también puede usar uno de los siguientes para expandir solo el historial, o sus alias, o ambos:

Control-x: historial-expandir-línea

o

Control-x: alias-expand-line

o

Control-x: historia-y-alias-expand-line

Esto se obtuvo de este blog , y esta pregunta sobre SuperUser , que es muy similar:

Brad Parks
fuente