Expand sub-shell antes de executá-lo?

11

Freqüentemente, executo comandos usando subshells e, às vezes, gostaria de ter as subshells expandidas antes de executar algo. Dessa forma, posso verificar o que estou fazendo e possivelmente editar o que está prestes a acontecer também.

Por exemplo, como posso obter a seguinte linha de comando para ser expandida antes de executá-la, para poder editar os resultados da subshell?

por exemplo,

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

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

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

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

Existe alguma maneira de fazer isso?

    
por Brad Parks 25.04.2013 / 15:49

2 respostas

5

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-e executaria o comando anterior novamente e inseria a saída:

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

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

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

    
por 25.04.2013 / 21:17
2

Veja um truque útil: adicione essa linha a ~ / .inputrc (criando o arquivo, se necessário):

Control-x: shell-expand-line

Note que você também pode usar uma das seguintes opções para expandir apenas o histórico ou seus aliases, ou ambos:

Control-x: history-expand-line

ou

Control-x: alias-expand-line

ou

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

Isso foi obtido deste blog e esta questão no SuperUser , que é muito semelhante:

    
por 26.04.2013 / 14:31