Eu estava procurando env
exibir todas as variáveis de ambiente. Aconteceu que eu emiti o comando set
e parece que ele "passou" um script para o console. Por que isso acontece?
Essepágina de referêncianão parece explicar isso.
If no options or arguments are supplied, set displays the names
and values of all shell variables
Responder1
set
é um comando interno do shell. Ao emitir isso na linha de comando, você vê tudo em seu ambiente atual. Isso incluirá todas as funções que você carregou. Observe que a maioria das distros incluirá pelo menos algumas funções úteis nos perfis do shell e, se você tiver o bash completamento instalado, terá muitas delas.
env
é um binário. Ele é carregado e executado pelo shell, como qualquer outro comando. Portanto, ele vê apenas quaisquer variáveis de ambiente que você exportou, o que deve excluir quaisquer funções do seu ambiente shell.
Responder2
Como Frank Schrijver explicou em seu comentário, o bash embutido set
irá despejar todas as variáveis do shell (variáveis que apenas "existem" naquele tempo de execução) e todasfunções de shell também, novamente funções inicializadas e existentes nesse processo shell específico.
Então, por exemplo, você verá funções como
_tilde ()
{
...
}
que é uma função cujo objetivo é fornecer preenchimento de tabulação no ~
caractere para seu editor de linha bash.
Na verdade, até mesmo a documentação do bash set
, que pode ser visualizada executando o comando
man bash | less '+/^\s*set \[--'
não menciona o fato de imprimir todas as funções do shell por padrão, mas como você descobriu e outros apontaram - ele também imprime funções do shell.