Quando digito evince *
em uma pasta com muitos pdfs, o que é enviado para evidenciar? O evince recebe X argumentos ou são abertas X ocasiões de evince, cada uma recebendo um argumento (um único arquivo)?
Responder1
Bash executa a expansão do shell em cada linha de comando. Uma dessas expansões éexpansão do nome do arquivoque substitui *
de acordo comcorrespondência de padrõesregras.
No caso de evince *
, ele substitui *
pelo conteúdo do diretório de trabalho atual. O conteúdo significa nomes de arquivos regulares, subdiretórios, links, etc. Arquivos de ponto são excluídos. Basicamente, o que você ganha ao correr ls
. No seu caso, nomes de arquivos de PDFs.
Portanto, o evince
binário é executado pelo Bash apenas uma vez com argumentos sendo nomes de arquivos ordenados alfabeticamente contidos no diretório de trabalho atual. A maneira como o Evince lida com seu lançamento posteriormente depende do Evince ou de qualquer estrutura ou biblioteca da qual ele depende, mas o barebones X não faz nada de especial aqui. Evince ou X nem sabem que foi executado com *
. Por exemplo:
$ ls -a
. .. .hiddendoc.pdf doc1.pdf doc2.docx otherdoc.pdf somedir
$ evince *
# is equivalent to
$ evince doc1.pdf doc2.docx otherdoc.pdf somedir
Se você quiser saber como *
é expandido, basta executar echo *
. Você pode notar que se o diretório de trabalho estiver vazio (contém apenas arquivos de ponto), o asterisco não é expandido e permanece como argumento para execução do comando.
Conforme mencionado no manual do Bash vinculado, há várias configurações que alteram esse comportamento. Sem mencionar outras conchas.