Expanda o subshell antes de executá-lo?


11

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

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

por exemplo

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

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

Gostaria de ver o subshell expandido antes de executar o comando, assim:

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

Existe alguma maneira de fazer isso?


1
O zsh pode fazer isso, mas tenho certeza que o bash não pode. No zsh, se você tiver o cursor no parâmetro e pressionar TAB, ele será expandido
Patrick

Eu mudei para zshe é ótimo e faz isso, como você sugere ... boa dica! Deixarei a resposta original aqui, pois foi uma bashpergunta.
Brad Parks

Respostas:


5

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

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

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

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

Ele também expande outras substituições de comando, mas não existe um comando semelhante 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*).


2

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

Control-x: linha de expansão de shell

Observe que você também pode seguir um destes procedimentos para expandir apenas o histórico ou seus aliases ou ambos:

Control-x: history-expand-line

ou

Control-x: alias-expandir-linha

ou

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

Isso foi colhido neste blog e nesta pergunta no SuperUser , que é muito semelhante:

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.