$PATH에 중복된 항목에 문제가 있습니까?

$PATH에 중복된 항목에 문제가 있습니까?

친구의 bashrc를 얻었습니다. 그래서 $PATH변수에 중복 항목이 생겼습니다. 이로 인해 명령을 시작하는 데 오랜 시간이 걸리는지 확실하지 않습니다. $PATHBash는 내부적으로 어떻게 작동합니까? 경로가 많으면 시작 시간이 느려지나요?

답변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에 설정되어야 합니다 .~/.profileBash를 사용하여 환경 변수를 설정하려면 어떤 설정 파일을 사용해야 합니까?,.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/376​​8 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

관련 정보