Expanda o subshell antes de executá-lo?

Expanda o subshell antes de executá-lo?

Costumo executar comandos usando subshells e, às vezes, gostaria de expandi-los antes de executar algo. Dessa forma, eu poderia verificar o que estou fazendo e possivelmente editar o que está prestes a acontecer também.

Por exemplo, como posso expandir a seguinte linha de comando antes de executá-la, para que eu possa editar os resultados do subshell?

por exemplo

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

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

Eu gostaria de ver o subshell expandidoantesEu executo o comando, assim:

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

Existe alguma maneira de fazer isso?

Responder1

shell-expand-line( \e\C-e) expande as substituições de comandos no bash.

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

$(!!)\e\C-eexecutaria o comando anterior novamente e inseriria a saída:

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

Ele também expande outras substituições de comandos, mas não existe nenhum comando como shell-expand-word.

No bash 4.0 ou posterior você também pode ativar globstar, digitar **/file.txte usar glob-complete-word( \eg) ou glob-expand-word( \C-x*).

Responder2

Aqui está um truque útil - adicione esta linha a ~/.inputrc (criando o arquivo, se necessário):

Control-x: linha de expansão do shell

Observe que você também pode fazer o seguinte para expandir apenas o histórico, ou seus aliases, ou ambos:

Control-x: linha de expansão de histórico

ou

Control-x: alias-expand-line

ou

Control-x: linha de expansão de histórico e alias

Isto foi colhidodeste blog, eesta pergunta no SuperUser, que é muito semelhante:

informação relacionada