PATH definido antes de / etc / zshenv

3

Estou tentando descobrir qual arquivo adiciona a pasta /opt/texbin à minha variável PATH no Ubuntu. Não está presente no meu arquivo /etc/environment . sudo grep -lr texbin . 2>/dev/null não produz nada na pasta /etc . E ainda se eu adicionar set -x ao início do meu arquivo /etc/zshenv , eu posso ver que /opt/texbin está no meu PATH antes de zsh originar este arquivo.

Alguma idéia?

    
por sencer 23.06.2014 / 19:44

3 respostas

3

Eu tentaria essa abordagem para rastrear a origem de /opt/texbin em sua variável PATH:

  1. Para obter uma lista de arquivos, que são realmente lidos (por exemplo, um arquivo não padrão pode ser originado por outro arquivo!), você pode invocar zsh com a opção SOURCE_TRACE ativado:

    $ zsh -o sourcetrace
    +/etc/zshenv:1> <sourcetrace>
    +/home/user/.zshrc:1> <sourcetrace>
    +/home/user/.zcompdump:1> <sourcetrace>
    +/home/user/.zshrc-last:1> <sourcetrace>
    
  2. Verifique estes arquivos, onde a variável PATH entra em ação:

    $ grep -ie "path.*=" files_from_step_1
    

    A insensibilidade a maiúsculas e minúsculas é crucial, pois zsh usa a matriz $path , que é convertida automaticamente na lista separada por cólon do tipo bash $PATH e vice-versa.

  3. Se ainda não tiver sorte, tente incluir uma mensagem de depuração em /etc/zshenv , em que os comandos são lidos pela primeira vez em:

    print -l $path
    

    Isso lhe dará uma boa lista da variável PATH, que o zsh herda de seu processo pai (gerenciador de exibição, processo init, etc.). *

  4. Se o caminho for realmente herdado do processo inicial, é crucial saber quais processos são relevantes:

    $ pstree -apH $$
    

    Isso produz uma árvore de processos, onde o processo do shell (pid in $$ ) é destacado. Verifique também os arquivos de configuração para esses processos e tenha em mente que

    • source /some/file ou . /some file também pode alterar o PATH
    • se você editar, por exemplo, /etc/profile no seu console atual, efetue logoff e efetue login novamente, o processo pai (gerenciador de logon X) ainda pode ter o ambiente antigo. +

* Como você escreveu, o PATH já contém /opt/texbin antes de /etc/zshenv ser lido, verificado por set -x em /etc/zshenv . Eu não recebo saída com essa técnica, mas com a minha etapa 3, incluí os outros passos na minha resposta também.

+ Sofri muito mal devido a esse comportamento há algum tempo ...

    
por 23.06.2014 / 21:47
1

A maneira correta de ativar o rastreio de execução ou o rastreio de origem no momento em que /etc/zshenv é carregado é ativá-lo no comando shell: zsh -l -o xtrace , zsh -l -o sourcetrace - não se esqueça de tentar com a opção -l já que o elemento do caminho só pode ser adicionado no login.

Além disso, se você ainda estiver recebendo um elemento de caminho adicionado antes de /etc/zshenv ser carregado, você poderá verificar se há um arquivo ~/.pam_environment . Essa é a versão local do usuário do arquivo /etc/environment e é carregada quase ao mesmo tempo, antes do shell ou do ambiente do usuário. Verifique a página de manual "pam_env" para mais detalhes sobre o formato usado - é diferente para o arquivo do usuário.

Outra possibilidade menor é a variável de ambiente ENV . Quando um shell compatível com SH é iniciado no modo compatível com SH, o arquivo cujo caminho está em ENV é carregado como um arquivo de inicialização antes de qualquer outra coisa. Pesquise a documentação do seu shell para mais detalhes. login.defs também é usado no login e por vários utilitários de usuário / login, mas /etc/environment é o padrão para todos os sistemas de login modernos e é preferível para estabelecer a variável PATH .

    
por 26.08.2016 / 21:12
0

A variável PATH que é passada para o seu shell no log-in é definida em /etc/login.defs . Existem duas configurações aqui, ENV_SUPATH e ENV_PATH . Dependendo se você logar como root ou como usuário, um dos dois é passado para o shell através da variável de ambiente PATH. Depois que a variável PATH é passada para o shell, quaisquer alterações adicionais são controladas pelos scripts de inicialização do shell.

    
por 30.07.2014 / 18:34

Tags