bash 터미널을 시작한 후 PATH 변수에 중복 항목이 포함되어 있음을 알았습니다. 내 터미널은 시작 로그인 쉘을 그래서, ~/.bash_profile
다음, 소스로 ~/.profile
와 ~/.bashrc
. ~/.profile
중복 된 경로 항목 만 작성합니다.
pedantic하기 위해서, 이것은 소스가되어야하는 파일들이 소스가되는 순서입니다 :
Sourced /etc/profile
Sourced /etc/bash.bashrc
Sourced .bash_profile
Sourced .profile
Sourced .bashrc
누구든지 이것을 "PATH 변수에 중복이 포함되어 있음"의 중복으로 표시하기 전에 계속 읽으십시오.
처음에 나는 이것이 ~/.profile
두 번 소싱되는 것과 관련이 있다고 생각 했기 때문에 파일이 소싱 될 때마다 파일을 로그 파일에 쓰게되고 놀랍게도 한 번만 소싱되었다는 것을 알려주는 하나의 항목 만 기록했습니다. 더 놀라운 것은에있는 항목을 주석 처리 할 때 ~/.profile
항목이 여전히 PATH
변수에 나타납니다 . 이로 인해 세 가지 결론이 나왔는데 그 중 하나는 빨리 배제되었습니다.
- Bash는 유효한 bash 주석을 무시하고 주석이 달린 코드를 계속 실행합니다.
~/.profile
출력을 출력하는 코드 (예 : 로그 파일)를 읽고 무시 하는 스크립트가 있습니다.~/.profile
다른 곳에서 공급되는 다른 사본이 있습니다.
첫 번째는 빠른 테스트로 인해 사실이 아니라고 결론을 내 렸습니다. 두 번째 및 세 번째 옵션은 도움이 필요한 곳입니다.
터미널을 시작할 때 실행되는 스크립트 로그를 어떻게 수집합니까? 나는 echo
bash가 소스인지 확인하기 위해 확인한 파일을 사용 했지만 터미널이 입력을 시작할 준비가되었을 때 실행을 추적하는 결정적인 방법을 찾아야합니다.
위의 방법을 사용할 수 없다면, 어느 스크립트가 실행 중인지 어디에서 볼 수 있는지 제안 할 수 있습니다 .
향후 참조
이것은 내 경로에 추가하는 데 사용하는 스크립트입니다.
function add_to_path() {
for path in ${2//:/ }; do
if ! [[ "${!1}" =~ "${path%/}" ]]; then # ignore last /
new_path="$path:${!1#:}"
export "$1"="${new_path%:}" # remove trailing :
fi
done
}
나는 이것을 다음과 같이 사용한다 :
add_to_path 'PATH' "/some/path/bin"
스크립트는 경로 앞에 변수가 존재하는지 확인합니다.
zsh 사용자의 경우 다음과 같은 기능을 사용할 수 있습니다.
function add_to_path() {
for p in ${(s.:.)2}; do
if [[ ! "${(P)1}" =~ "${p%/}" ]]; then
new_path="$p:${(P)1#:}"
export "$1"="${new_path%:}"
fi
done
}
2018 년 8 월 28 일 수정
이 스크립트로 내가 할 수있는 또 하나의 일은 경로를 수정하는 것입니다. .bashrc
파일을 시작할 때 다음과 같이합니다.
_temp_path="$PATH"
PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin'
add_to_path 'PATH' "$_temp_path"
unset _temp_path
무엇으로 PATH
시작 해야하는지는 당신에게 달려 있습니다 . PATH
먼저 결정하여 확인 하십시오 .
~/.profile
와 ~/.bashrc
에서~/.bash_profile
~/.profile
경우~/.bash_profile
에만 읽습니다 ...