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
배열의 시작 부분에 를 삽입합니다 ( $path
in 은 in 과 같이 zsh
연결된 배열입니다 ).$PATH
csh
glob에 대해 활성화 하고 디렉터리 유형의 파일을 선택하는 (N/)
glob 한정자입니다 . 따라서 해당 두 파일이 존재하고 유형인 경우 미리 추가합니다.N
nullglob
/
$PATH
예배 규칙서.
pwd
p
현재 w
orking d
디렉토리(변수의 내용 )를 린팅 하는 명령입니다 $PWD
. 를 사용하는 것이 합리적입니다. $(pwd)
또는 시작 위치에 조건부 로 디렉토리를 추가하려는 경우 $PWD
에만 사용하는 것이 좋습니다. 그러나 그렇더라도 그것은 위험할 수 있습니다. 예를 들어 또는 다른 사람의 디렉토리 에서 시작한 경우 누군가가 여기에 또는 같은 표준 명령을 무시하는 악성 파일을 심었을 수 있습니다 ..zshrc
$PATH
zsh
zsh
/tmp
ls
rm
답변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
.