$ HOME / bin dir não está no $ PATH

9

No meu ~ / .profile, tenho um último bloco que deve carregar meu bin / diretório pessoal assim:

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

Mas aparentemente não está carregado:

echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

Por que isso não está funcionando?

Meu shell é bash.

Editar para Tigger

echo $0 => bash

echo $HOME => /home/student

whoami => student

less /etc/*-release => 
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
NAME="Debian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
    
por ateymuri 23.07.2017 / 11:55

4 respostas

7

Do topo de ~/.profile :

# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.

Então (se você estiver usando bash como seu shell), estou supondo que ~/.bash_profile ou ~/.bash_login esteja em seu sistema. Selecione um e edite-o para incluir:

export PATH=$PATH:$HOME/bin

Em seguida, salve e source ~/.bash_login ou faça logout e faça login novamente.

Editar :

Você diz que ambos ~/.bash_profile e ~/.bash_login estão ausentes de seu $HOME . Acho que precisamos confirmar algumas coisas. Por favor, poste os resultados dos seguintes itens em sua pergunta original:

echo $0
echo $HOME
whoami
less /etc/*-release

Editar 2 :

Pessoalmente, não sei por que ~/.profile não está sendo incluído no seu caso com base nas informações fornecidas e na documentação. Durante o teste, notei que meu ~/.profile é verificado quando eu ssh , mas não quando eu inicio um novo terminal.

Mas há uma solução simples para permitir que $HOME/bin seja incluído no seu shell interativo. Edite (crie se não presente) ~/.bashrc e adicione a seguinte linha a ele:

export PATH=$PATH:$HOME/bin

Salvar, sair e fazer login novamente, ou source ~/.bashrc .

A linha export pode ser expandida para verificar se o $HOME/bin existe se você gostar de:

if [ -d "$HOME/bin" ]
then
    export PATH=$PATH:$HOME/bin
fi

Por que ~/.bashrc em vez de outro arquivo? Pessoalmente preferência e parece ser mais confiável também.

    
por 23.07.2017 / 12:10
7

As regras para a inicialização de arquivos de inicialização de shell são complexas . É provável que, com sua configuração, .profile não esteja sendo incluído quando você abrir um novo terminal dentro de uma sessão X (tente colocar um echo .profile dentro de .profile e veja se a mensagem aparece quando você inicia um shell) .

.  "$HOME/.profile"

deve recarregar o perfil manualmente.

Efetuar login e logout de X também deve fazer com que .profile seja carregado.

Como alternativa, você pode usar . $HOME/.profile de .bashrc (usando um protetor baseado em variável para evitar dupla inclusão) para garantir que .profile seja sempre incluído sempre que você iniciar um shell.

(Você não deve precisar de export PATH pois PATH já é uma variável exportada e modificar seu valor não alterará seu status export .)

    
por 23.07.2017 / 12:12
3

Se você deseja obter .profile loaded, tudo o que você precisa é iniciar um shell de login:

$ bash -l

Isso deve ser suficiente para uma sessão em execução. Você pode comparar o PATH antes e depois de uma campanha de login ter sido iniciada para confirmar a diferença.

Para uma solução mais permanente, você precisa que um shell de login seja iniciado em algum momento antes do seu terminal (console) ser iniciado. O login como um usuário específico acontece em algum dm (gerenciador de exibição) (gnome, kde, xfce, lxde, etc). Deve ser o trabalho de qualquer um deles alterar a variável de ambiente PATH para atender às suas necessidades.

Por exemplo, para o xfce, a solução é alterar xinitrc :

$ cat >"$HOME/.config/xfce4/xinitrc" <<-\_EOT_
#!/bin/sh

# Ensure programs in ~/bin are available for the X session.
p="$HOME/bin";
[ "$p" != "${PATH%%:*}" ] && export PATH=$p:$PATH
_EOT_
cat "/etc/xdg/xfce4/xinitrc" | tail -n+2 >> "$HOME/.config/xfce4/xinitrc"

Para o gnome, parece que o arquivo a ser alterado é ~/.pam_environment .

E para o KDE, siga este guia , para criar o arquivo, você pode usar este código:

$ file='$HOME/.config/plasma-workspace/env/path.sh'
$ code='export PATH=$HOME/bin:$PATH'
$ echo "$code" >> "$file"
    
por 24.07.2017 / 15:09
0

This link também tem alguma informação útil.

    
por 26.07.2017 / 15:29