set command sem argumentos

4

Eu estava procurando env para exibir todas as variáveis de ambiente. Aconteceu de emitir o comando set e parece "cat" um script para o console. Por que isso acontece?

Esta página de referência não parece explicar isso.

 If no options or arguments are supplied, set displays the names
 and values of all shell variables
    
por H2ONaCl 17.05.2016 / 23:06

2 respostas

1

Como Frank Schrijver explicou em seu comentário, o bash builtin set irá despejar todas as variáveis do shell (variáveis que "existem" nesse tempo de execução) e todas as funções do shell , novamente funções inicializadas e existente nesse processo de shell específico.
Então, por exemplo, você verá funções como

_tilde () 
{ 
   ...
}

que é uma função cuja finalidade é fornecer a conclusão da tabulação no caractere ~ para o editor de linha bash.
Na verdade, mesmo a documentação bash para set , visível 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 outras apontaram - ele também imprime as funções do shell.

    
por the_velour_fog 17.05.2016 / 23:51
1

set é um comando interno do shell. Quando você emite isso na linha de comando, você vê tudo em seu ambiente atual. Isso incluirá todas as funções que você carregou. Note que a maioria das distros incluirá pelo menos algumas funções úteis nos perfis do shell, e se você tiver o bash completion instalado, você terá um monte delas.

env é um binário. Ele é carregado e executado pelo shell, assim como qualquer outro comando. Portanto, ele vê apenas as variáveis de ambiente que você exportou, o que deve excluir quaisquer funções do seu ambiente de shell.

    
por wyrm 18.05.2016 / 00:17

Tags