Eu sei que existe um conjunto específico de regras que expandem os comandos digitados pelo usuário. (Vamos falar sobre o bash shell.)
É possível imprimir um comando no formulário após a expansão do shell? Parece ser um bom utilitário para aprender e verificar como o shell expande caracteres especiais.
por exemplo
$ echo *
{all the filenames in current dir}
Quero imprimir o comando expandido, que é a seguinte linha:
echo {all the filenames in .}
echo cat * | someprogram
não faz o que você pensa desta resposta.Você pode usar
set -x
.Por exemplo, considere o script:
Quando executado, mostra a
echo
instrução expandida antes de executá-la:E, como Kundor aponta, isso também funciona interativamente na linha de comando:
Documentação
man bash
explica o queset -x
faz o seguinte:O valor padrão para
PS4
é, como mostrado acima, um sinal de mais seguido por um espaço.fonte
Para um shell interativo, pressionar
Ctrl+x
e*
depois de digitar o padrão glob editará sua linha de comando com esse padrão expandido. Na página do manual do bash:Você também pode estar interessado em expansões da lista glob (
Ctrl+x
,g
).fonte
Ctrl+x, *
imediatamente após digitarecho *
e antes de pressionar a tecla Enter? Se ainda assim não funcionar, você pode modificar~/.inputrc
e vincular glob-expand-word a outra coisa.Ctrl+x
seguido deShift+8
. Você pode tentar ver seCtrl+x, g
funciona ou, como eu disse anteriormente, atribuir sua própria chave no.inputrc
arquivo.Se quiser ver como os argumentos são expandidos ou tokenizados, você pode usar um programa ou script que imprima seus argumentos. Aqui está uma implementação em
bash
:Supondo que você coloque isso em um arquivo chamado
printargs.sh
(e o torne executável), você obterá uma saída como estafonte