$pwd를 $PATH 변수에 조건부로 할당

$pwd를 $PATH 변수에 조건부로 할당

bin디렉토리가 있을 때 프로젝트별 디렉토리가 포함된 현재 작업 디렉토리를 $PATH에 추가하고 싶습니다 .

그래서 나는 다음 줄을 내.zshrc:

[ -d "$(pwd)/vendor/bin" ] && export PATH="$(pwd)/vendor/bin":"$PATH"
[ -d "$(pwd)/node_modules/.bin" ] && export PATH="$(pwd)/node_modules/.bin":"$PATH"

명령을 터미널에 수동으로 붙여넣을 때 위쪽 경로가 앞에 추가되지만 그렇지 않으면 그렇지 않습니다. $PATH이전과 동일합니다 . 나는 또한 그것을 "${PATH}"zsh 함수와 같이 작성하는 다양한 방법을 시도했습니다 path. 수동으로 붙여 넣으면 모두 작동하지만 내부에서는 작동하지 않습니다..zshrc파일.

--

나는 켜져있다macOS 하이 시에라 v10.13.6와 더불어기본 터미널그리고 사용zsh v5.7.1.

답변1

구체적 으로 zsh다음을 수행할 수 있습니다.

path[1,0]=( ~/projects/{vendor/,node_modules/.}bin(/N) )

어디:

path[1,0]=( list )

list배열의 시작 부분에 를 삽입합니다 ( $pathin 은 in 과 같이 zsh연결된 배열입니다 ).$PATHcsh

glob에 대해 활성화 하고 디렉터리 유형의 파일을 선택하는 (N/)glob 한정자입니다 . 따라서 해당 두 파일이 존재하고 유형인 경우 미리 추가합니다.Nnullglob/$PATH예배 규칙서.

pwdp현재 working d디렉토리(변수의 내용 )를 린팅 하는 명령입니다 $PWD. 를 사용하는 것이 합리적입니다. $(pwd)또는 시작 위치에 조건부 로 디렉토리를 추가하려는 경우 $PWD에만 사용하는 것이 좋습니다. 그러나 그렇더라도 그것은 위험할 수 있습니다. 예를 들어 또는 다른 사람의 디렉토리 에서 시작한 경우 누군가가 여기에 또는 같은 표준 명령을 무시하는 악성 파일을 심었을 수 있습니다 ..zshrc$PATHzshzsh/tmplsrm

답변2

.rc가 아닌 원하는대로 수행하는 것이 가능하지 않다고 생각합니다(.rc는 한 번만 실행되며 특별히 수행하지 않는 한 나중에 실행되지 않습니다). 하지만 두 개의 별칭은 어떻습니까?

backupPATH=$PATH
function mkpath {
    [ -d "$(pwd)/vendor/bin" ] && export PATH="$(pwd)/vendor/bin":"$PATH"
    [ -d "$(pwd)/node_modules/.bin" ] && export PATH="$(pwd)/node_modules/.bin":"$PATH"
}
alias resetpath="PATH=$backupPATH"

이를 통해 언제든지 현재 디렉터리를 $PATH에 추가할 수 있습니다.

답변3

다른 사람들이 지적했듯이, 현재 작업 디렉터리가 프로젝트를 포함하는 디렉터리가 아닐 수도 있고 해당 코드 조각이 다음과 같기 때문에 새 터미널을 열 때 코드가 반드시 예상대로 작동하지는 않습니다.오직새 쉘이 시작될 때 실행됩니다.

대신, 아마도 디렉토리와 관련하여 프로젝트가 어디에 있는지 알고 있을 것입니다 $HOME. 그렇다면 대신 사용할 수 있습니다.

for binpath in vendor/bin node_modules/.bin; do
    if [ -d "$HOME/projects/$binpath" ]; then
        PATH=$HOME/projects/$binpath:$PATH
    fi
done

export PATH

$HOME/projects여기가 귀하의 프로젝트가 있는 곳이라고 가정합니다 .

마지막 에는 이미 내보냈을 가능성이 높 export으므로 필요하지 않을 수도 있습니다 PATH.

관련 정보