$ HOME / bin 디렉토리가 $ PATH에 없습니다.


11

내 안에 다음과 같이 ~/.profile내 개인을로드 해야하는 마지막 블록 bin/ directory이 있습니다.

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

그러나로드되지 않은 것 같습니다.

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

왜 이것이 작동하지 않습니까? (내 껍질은 bash입니다.)

티거 편집

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/"

이 부분에 대한 배경 지식.profileaskubuntu.com/questions/284640을 참조하십시오 .
JdeBP

이것은 어느 껍질입니까?
njsg

2
디렉토리가 존재한다고 가정합니까?
Beat Bolli

@njsg 그것은 bash입니다

아마도 이것이 실행 된 후 PATH 변수를 재설정하는 것이 있습니다. -xbash에 전달 된 플래그 를 사용 하여 PATH가 재설정 된 위치를 확인하여 확인할 수 있습니다 . 또한 export PATH="$HOME/bin:$PATH"후속 프로세스에 제공해야합니다.
Charles Addis

답변:


10

상단에서 ~/.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.

따라서 ( bash쉘로 사용 하는 경우 ) 시스템 중 하나 ~/.bash_profile이거나 추측하고 있습니다 ~/.bash_login. 하나를 선택하고 다음을 포함하도록 편집하십시오.

export PATH=$PATH:$HOME/bin

그런 다음 저장 및 source ~/.bash_login/ 또는 로그 아웃 한 후 다시 로그인하십시오.

편집 :

당신은 그 두 말을 ~/.bash_profile하고 ~/.bash_login모두 당신의에서 누락되었습니다 $HOME. 몇 가지 확인이 필요하다고 생각합니다. 원래 질문에 다음 결과를 게시하십시오.

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

편집 2 :

개인적으로, 나는 ~/.profile제공된 정보와 문서에 근거하여 왜 귀하의 사례에 포함되지 않았는지 모르겠습니다 . 테스트하는 동안 새로운 터미널을 시작할 때가 아니라 ~/.profile스캔 할 때 내 것이 스캔되는 것을 알았 ssh습니다.

그러나 $HOME/bin대화식 쉘에 포함 시킬 수있는 간단한 솔루션 이 있습니다. 편집하고 (없는 경우 작성) ~/.bashrc다음 행을 추가하십시오.

export PATH=$PATH:$HOME/bin

저장, 로그 아웃하고 다시 로그인하거나 source ~/.bashrc.

원하는 경우 export라인을 확장하여 $HOME/bin존재하는지 확인할 수 있습니다 .

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

~/.bashrc다른 파일 대신 왜 ? 개인적으로 선호하고 더 신뢰할 수있는 것 같습니다.


질문자가 어떤 쉘을 지정하지 않았기 때문에 Bourne Again 쉘을 전혀 사용하지 않을 가능성도 있습니다. 분명히 같은 질문을 가진 다른 사람들은 그렇지 않을 수 있습니다.
JdeBP

@JdeBP : 답변을 명확하게 추가했습니다. 데비안 사용자라고 가정하면 기본 대화 형 쉘을 변경하지 않았지만 가질 수 있다고 생각합니다.
Tigger

나도 ~/.bash_profile없습니다 ~/.bash_login. 내에서 ~단지가 .bash_history.bash_logout(그리고 물론 .profile).

@Tigger가 업데이트되었습니다!

@student : 또 다른 업데이트를 만들었습니다. 실제로 무슨 일이 일어나고 있는지에 대한 손실. 왜 ~/.profile건너 뛰는 지 알게되면 매우 흥미 롭습니다 .
Tigger

6

쉘 시작 파일이 복잡에서 소싱에 대한 규칙 . .profileX 세션 내에서 새 터미널을 열 때 설치 프로그램에 포함되지 않을 수 있습니다 ( echo .profile내부에 넣고 .profile쉘을 시작할 때 메시지가 나타나는지 확인하십시오).

.  "$HOME/.profile"

프로필을 수동으로 다시로드해야합니다.

X 로그인 및 로그 아웃도 .profile로드 되어야합니다 .

양자 택일로, 당신은 할 수 . $HOME/.profile에서 .bashrc확인 (배 포함을 방지하기 위해 변수를 기반 가드를 사용하는 동안) .profile당신이 쉘을 시작할 때마다 항상 포함되어 있습니다.

(당신은 필요가 없습니다 export PATH으로 PATH이미 내 보낸 변수와 그 값을 수정하면 그 변경되지 않습니다 export상태.)


.bashrc에서 .profile 소싱! 대부분의 경우 .profile에는`가 포함됩니다. .bashrc`, 이것은 무한 루프를 겪지 않을 것입니까?!
Jonah

@youness 나는 모두를하고있어 내가 사용하고 경비원을 (포함 [ -z "$has___profile" ] || return; has__profile=1) 내가 더 무한 루프 모두 얻을 수 있도록 .profile하고 .bashrc(BASH_VERSION가 정의되어있는 경우에만) 내가 거기를 얻었는지에 상관없이.
PSkocik

알았어! 나의 나쁜 영어는 나에게이 원치 않는 질문을하도록 강요했다. (설명을위한 코드를 넣는 것이 문자 표현보다 낫다) 시간 내 주셔서 감사합니다 :-)
Jonah

홀수 구성이 아닌 한 간단한 bash -l것이로드됩니다 .profile. 또한 사용자가 로그인 할 때 PATH를 올바르게 설정해야합니다. 이는 사용중인 "디스플레이 관리자"(dm)에서 gnome, KDE, xfce, lxde 등을 의미합니다.
Isaac

1

당신이 얻을하려는 경우 .profile로드 당신이 필요로하는 모든 로그인 쉘을 시작하는 것입니다 :

$ bash -l

세션을 실행하기에 충분해야합니다. 로그인 bash가 시작되기 전후에 PATH를 비교하여 차이점을 확인할 수 있습니다.

보다 영구적 인 솔루션을 위해서는 터미널 (콘솔)이 시작되기 전에 로그인 쉘을 시작해야합니다. 특정 사용자로 로그인하면 일부 dm (디스플레이 관리자) (gnome, kde, xfce, lxde 등)에서 발생합니다. 환경 변수 PATH를 필요에 맞게 변경하는 것은 그들 중 하나의 일이어야합니다.

예를 들어 xfce의 경우 해결책은 다음과 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"

그놈의 경우 변경할 파일~/.pam_environment입니다.

KDE의 경우이 안내서 에 따라 파일을 작성하려면이 코드를 사용할 수 있습니다.

$ file='$HOME/.config/plasma-workspace/env/path.sh'
$ code='export PATH=$HOME/bin:$PATH'
$ echo "$code" >> "$file"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.