친구의 bashrc를 얻었습니다. 그래서 $PATH
변수에 중복 항목이 생겼습니다. 이로 인해 명령을 시작하는 데 오랜 시간이 걸리는지 확실하지 않습니다. $PATH
Bash는 내부적으로 어떻게 작동합니까? 경로가 많으면 시작 시간이 느려지나요?
답변1
항목이 더 많다고 해서 $PATH
시작 속도가 직접적으로 느려지는 것은 아니지만, 쉘 세션에서 특정 명령이 처음 실행될 때마다 시작 속도가 느려집니다(bash가 캐시를 유지하기 때문에 명령이 실행될 때마다 그런 것은 아닙니다). 특히 느린 파일 시스템(예: NFS, Samba 또는 기타 네트워크 파일 시스템이나 Cygwin)이 있는 경우가 아니면 이러한 속도 저하가 거의 눈에 띄지 않습니다.
중복된 항목은 시각적으로 볼 때 약간 짜증나고 $PATH
더 많은 콘텐츠를 살펴보아야 합니다.
중복된 항목을 추가하는 것을 방지하는 것은 쉽습니다.
case ":$PATH:" in
*":$new_entry:"*) :;; # already there
*) PATH="$new_entry:$PATH";; # or PATH="$PATH:$new_entry"
esac
참고: 다른 사람의 쉘 스크립트를 얻는다는 것은 그들이 작성한 코드를 실행한다는 의미입니다. 즉, 친구에게 언제든지 귀하의 계정에 대한 액세스 권한을 부여할 수 있습니다.
참고 사항: 설정이나 기타 환경 변수에 대한 올바른 위치 .bashrc
가 아닙니다 . 환경 변수는 .see $PATH
에 설정되어야 합니다 .~/.profile
Bash를 사용하여 환경 변수를 설정하려면 어떤 설정 파일을 사용해야 합니까?,.bashrc와 .bash_profile의 차이점.
답변2
awk
사람들이 다음을 사용하여 PATH 변수에서 중복 항목을 지우는 것을 보았습니다 .
PATH=$(printf "%s" "$PATH" | awk -v RS=':' '!a[$1]++ { if (NR > 1) printf RS; printf $1 }')
이것을 자신의 bashrc에 추가하고 실행하기 전에 다른 파일을 특정 위치에 가져왔는지 확인할 수 있습니다.
또 다른 옵션은 다음을 사용하는 것입니다.이것pathmerge
유용.
속도 질문에 관해서는 이는 쉘의 시작 시간에 큰 영향을 미치지 않지만 명령을 완료하는 데 시간을 절약할 수 있습니다. 특히 명령이 경로에서 발견되지 않고 검색할 때 해당 폴더를 찾는 경우 더욱 그렇습니다. 같은 길을 반복적으로.
보안에 대한 참고사항:당신은해야진짜알아채다자일스의 경고안전에 관해서는 여기를 참조하세요. 다른 사용자가 소유한 파일을 가져오면 해당 사용자가 셸을 시작할 때마다 자신의 사용자로서 자신의 코드를 실행할 수 있는 무료 패스를 제공할 수 있습니다. 이러한 사용자의 비밀번호를 신뢰하지 않는 경우 해당 쉘 파일을 가져오면 안 됩니다.
답변3
@Gilles의 답변을 바탕으로 이를 함수로 래핑하여 입력을 최소화할 수 있습니다.
function addToPATH {
case ":$PATH:" in
*":$1:"*) :;; # already there
*) PATH="$1:$PATH";; # or PATH="$PATH:$1"
esac
}
addToPATH /Applications/AIRSDK_Compiler/bin
addToPATH ~/.local/lib/npm/bin
답변4
PATH
조작(콜론으로 구분된 목록 조작)은 쉽습니다. 나는 2000년에 Linux Journal에 설명된 Stephen Collyer의 bash_path_funcs를 사용합니다.
https://www.linuxjournal.com/article/3645 https://www.linuxjournal.com/article/3768 https://www.linuxjournal.com/article/3935
addpath
이 함수는 처음에 해당 항목이 경로에 존재하지 않는 경우에만 경로에 항목을 추가합니다. delpath -n
경로에서 존재하지 않는 디렉터리를 제거합니다.
pathfunc.tgz
에서 파일을 받을 수 있습니다 .https://web.archive.org/web/20061210054813/http://www.netspinner.co.uk:80/Downloads/pathfunc.tgz