Você pode simplesmente repetir o comando inteiro:
echo ls -l file*.txt
Estou ensinando a alguém como funciona o bash globbing. Eu gostaria de mostrar (através de algum recurso bash de depuração, se possível) como o bash expande os padrões antes de chamar o comando. Por exemplo, eu gostaria de fazer o seguinte:
ls -l file*.txt
Então eu gostaria que o bash mostrasse o que o file*.txt
expandiu para:
ls -l file1.txt file2.txt file3.txt file4.txt
Eu sei como fazer isso usando bash -x
de dentro de um script, mas eu prefiro fazê-lo no shell interativo para que eu não tenha que introduzir idéias sobre scripts. Existe uma maneira de fazer isso no modo interativo ?
Você pode simplesmente repetir o comando inteiro:
echo ls -l file*.txt
Ok, então é basicamente o que eu geralmente defino no meu .inputrc
para obter zsh
como o comportamento em bash
:
set show-all-if-unmodified on
set show-all-if-ambiguous on
Coloque as linhas acima em ~.inputrc
e você está pronto para ir. Ao fazer algo como ls *.txt
apenas aba e ele deve globar tudo para você e gerar os arquivos correspondentes.
EDIT: citações de man bash
:
show-all-if-ambiguous (Off) This alters the default behavior of the completion functions. If set to On, words which have more than one possible completion cause the matches to be listed immediately instead of ringing the bell.
show-all-if-unmodified (Off) This alters the default behavior of the completion functions in a fashion similar to show-all-if-ambiguous. If set to On, words which have more than one possible completion without any possible partial completion (the possible completions don't share a common prefix) cause the matches to be listed immediately instead of ringing the bell.
EDIT2: exemplo de saída
$ ls *
books dev music templates
$ ls *
Embora não funcione se o mesmo tentar expandir o seguinte (como tentaria concluir o argumento posterior ~/some/other/folder
:
$ cd * ~/some/other/folder
Tags wildcards