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-e
executaria 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.txt
e 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: