Como posso listar todas as variáveis ​​de shell?

18

Lendo sobre esta pergunta: No zsh, como posso listar todas as variáveis ​​de ambiente? , Eu me perguntava, como posso listar todas as variáveis ​​de shell ?

Além disso, a distinção entre variáveis ​​de shell e variáveis ​​de ambiente se aplica a shells diferentes de zsh?

Estou interessado principalmente no Bash e no Zsh, mas seria ótimo saber como fazer isso em outros shells convencionais.

Josh
fonte

Respostas:

21

Listar todas as variáveis ​​de shell

bash: use set -o posix ; set. As opções POSIX estão lá para evitar gerar muita informação, como definições de função. declare -ptambém funciona.

zsh : usar typeset

Variáveis ​​do shell e variáveis ​​de ambiente

Uma variável de ambiente está disponível para exec()os processos filhos (como uma cópia. Se o processo pai alterar a variável, o ambiente filho não será atualizado). Uma variável que não é de ambiente está disponível apenas para os fork()subshells shell e -ed em execução atuais . Esta distinção está presente em todas as conchas.

(completado graças aos comentários)

Uriel
fonte
declare -pfazer o mesmo
Costas
A questão também tem uma resposta aqui: stackoverflow.com/questions/1305237/...
Uriel
11
set -o posixnão existe no zsh; setnão gera definições de função.
vinc17
11
set -o posixé um erro de sintaxe na maioria dos shells.
mikeserv
3
Variáveis ​​de shell também estão disponíveis em processos filho. A diferença ocorre quando o processo filho executa um novo programa: variáveis ​​de ambiente são repassadas exec, variáveis ​​de shell não.
Barmar 31/12/14
7

Existem muitas alternativas:

printenv

Imprima os valores do ambiente especificado VARIABLE (s). Se nenhum VARIABLE for especificado, imprima os pares de nome e valor para todos eles.

env

env - executa um programa em um ambiente modificado

exportação

Defina uma variável de ambiente. Marque cada nome a ser passado para os processos filho no ambiente .....

-p Exibe a saída em um formulário que pode ser reutilizado como entrada.

Se nenhum nome for fornecido, ou se a opção `-p 'for fornecida, uma lista de nomes exportados será exibida.

conjunto

também é útil para obter variáveis ​​de shell.

Se você precisar de informações extras (inteiro, exportado), use

formatado

A exportação tem uma vantagem, pois sua saída pode ser imediatamente lida novamente no shell.

Por fim, há

compgen -v

Exiba possíveis conclusões dependendo das opções.

que mostra todas as variáveis, shell e ambiente, sem seu valor ou informações extras. Você precisará ecoar $ VARIABLE_NAME para encontrar o valor da variável. Mas pelo menos a lista está completa. Pertence ao bash , não ao zsh .

MariusMatutiae
fonte
11
exportnão tem vantagem sobre set, pelo menos, quando se trata de citar para reentrada no shell. E printenve envnão são de todo sobre variáveis do shell, embora estes fazem muitas vezes coincidem com as variáveis de ambiente.
mikeserv
3

Com zsh, você pode usar typeset, o que fornece mais informações do que set, por exemplo, o tipo das variáveis. Você ainda pode filtrar a saída com grepou sed, dependendo do que deseja. As variáveis ​​de ambiente são marcadas como exportedna saída.

vinc17
fonte