Como o caminho unix é definido quando o computador é iniciado pela primeira vez?

1

Eu uso um mac. Se eu abrir um terminal e executar echo $PATH , obtenho a variável "PATH" atual em meu ambiente. Se eu adicionar algo ao meu caminho ou às minhas outras variáveis de ambiente, ele persistirá enquanto o processo estiver ativo.

O que eu quero saber é como esse caminho obteve os valores que ele tem por padrão? Eu olhei no meu .zshrc (ou .bash * se eu estivesse usando o bash) mas não há nada lá que exporte todos os programas que estão no caminho. O que é sobre o sistema operacional os controles este padrão PATH lista?

    
por user772401 01.10.2015 / 23:47

4 respostas

2

login(1) tradicionalmente definiu PATH antes de transformar as coisas no shell, embora seja necessário pensar diferentemente no OS X, pois também há ~/.MacOSX/environment.plist onde isso pode ser definido (provavelmente não é recomendado o uso, a menos que seja necessário para alguma aplicação especial) e, por último, verifiquei a Apple estava adicionando um comando path_helper(8) para confundir com PATH nos arquivos globais do shell rc em /etc .

Para o ZSH no Mac OS XI, desative path_helper e defina PATH manualmente apenas em meu ~/.zshenv file . Isso pode não ser ideal se você realmente precisar de algo em um caminho definido por path_helper .

    
por 02.10.2015 / 00:38
1

O link que @corleone postou mostra como a variável de ambiente $ PATH é interpretada.

A razão pela qual ele não persiste quando você o declara no terminal é porque esse é um processo temporário que acabará por sair. A variável precisa ser configurada a partir de um arquivo que é originado quando o shell é iniciado, o que normalmente é um dos seus arquivos de ponto.

Ao contrário de muitos sistemas operacionais, o OS X não inclui automaticamente um .profile ou .bashrc nos diretórios home dos usuários, mas, por padrão, padroniza .bash_profile, que será avaliado por último se você criar um .profile ou .bashrc (que também será avaliado).

Se você quiser atualizar seu $ PATH para incluir diretórios específicos, o melhor lugar para colocá-lo (no OS X) seria em seu .bash_profile, que terá precedência sobre qualquer outro local que defina essa variável em particular. Se você não quiser sobrescrever nada, mas apenas quiser adicionar algo, no seu .bash_profile, você pode incluir uma linha como esta:

PATH="$PATH:/path/to/another/bin"
    
por 02.10.2015 / 00:29
0

Na inicialização do shell, /etc/profile runs /usr/libexec/path_helper e a saída desse comando é eval ed para definir o valor inicial do caminho. Veja man path_helper para ver como este programa obtém a lista inicial de diretórios para colocar em sua saída.

    
por 02.10.2015 / 15:45
0

O loginwindow.app é responsável pela configuração do ambiente inicial de um usuário. O loginwindow.app passa pelo processo de autenticação e, quando o usuário é autenticado, o ambiente é configurado como se login -pf USERNAME fosse chamado (leia man login e man environ ). Neste ponto, o PATH é /usr/bin:/bin:/usr/sbin:/sbin igual ao user.cs_path = /usr/bin:/bin:/usr/sbin:/sbin definido no kernel. Devo mencionar que isso é tudo executado pelo root e se você estiver usando uma sessão GUI, não há shell.

O Terminal.app iniciará seu shell como um shell de login por padrão. login -pf USERNAME é executado (como root) e, em seguida, os arquivos rc do shell são lidos. Para bash e ksh , /private/etc/profile is read. For zsh , / privada / etc / zshenv is read. For csh , / privada / etc / csh.login is read. All use / usr / libexec / caminho_helper to modify the PATH set by the loginwindow .app '.

    
por 02.10.2015 / 15:36

Tags