Como / onde as variáveis de ambiente de armazenamento da shell?

2

Portanto, há $ PWD, $ PATH, $ USERNAME e tudo isso. Eu tenho trabalhado no meu próprio shell e acabei de apresentar hoje variáveis de ambiente. A maneira como estou fazendo isso é criando strings chamadas pwd, path e tudo isso, quando há um comando para ecoar, digamos, $ PWD, digo para imprimir pwd. É a mesma coisa que o bash faz? Eu ainda não tenho a disposição para definir variáveis de ambiente, mas vou trabalhar nisso, eu acho. Minha principal questão seria onde e como os projéteis reais fazem isso.

Outra questão um tanto relacionada, como está a impressão relacionada a tudo isso? Porque printenv é um binário e sempre imprime as variáveis de ambiente bash, não do shell que estou usando atualmente para executá-lo em primeiro lugar (obviamente, como ele detectaria as strings no meu programa que eu configurei para ser o meu caminho e pwd) então de onde isso vem?

    
por GNU Geek 13.08.2017 / 20:12

2 respostas

4

Um shell pode armazenar variáveis de ambiente da maneira que desejar. Não é realmente relevante. O que é relevante é que o shell deve ser capaz de passar o ambiente para um processo filho (incluindo printenv ) através da chamada do sistema execve .

    
por 13.08.2017 / 20:24
2

Veja man 7 environ . Quando seu shell executa outro processo - por qualquer sabor de exec (3) - esse processo herda o ambiente de seu antecessor. Um design conveniente para o seu shell pode ser manter duas listas: de variáveis de shell exportadas e não exportadas. Aqueles exportados podem ser mantidos no próprio ambiente do shell com putenv (3) e automaticamente herdados por quaisquer processos criados pelo seu shell. Aqueles não exportados podem estar em uma lista separada, acessível apenas ao shell.

Se esse tipo de coisa é interessante para você, você pode encontrar The Linux Programming Interface de Michael Kerrisk uma referência útil.

    
por 14.08.2017 / 21:05

Tags