$PATH에 항상 $(pwd)/sub_directory/.bin을 포함하도록 만드는 방법

$PATH에 항상 $(pwd)/sub_directory/.bin을 포함하도록 만드는 방법

경로가 ~/dev/project1/node_modules/.bin/ionic존재하고 내 작업 디렉터리가 ~/dev/project1이면 ionic을 입력하고 Enter 키를 누를 수 있기를 원합니다.

이러한 모든 하위 디렉터리를 PATH에 포함할 수 있지만 더 깔끔한 방법이 있는지 궁금합니다. 내 경로에 항상 현재 작업 디렉터리에 상대적인 하위 디렉터리가 포함되도록 몇 가지 마법을 추가하고 싶습니다.

해당 하위 디렉터리에 대한 모든 상위 디렉터리를 검색하여 모두 경로에 추가하도록 할 수 있으면 보너스 포인트가 있습니다.

답변1

검색 경로에 상대 경로를 넣을 수 있습니다. 이는 프로젝트의 일부가 아닌 디렉토리에 있을 때 예기치 않은 바이너리를 실행할 수 있기 때문에 위험합니다. 다중 사용자 시스템에서는 이 작업을 수행하지 마십시오.

PATH=…;node_modules/.bin/ionic;…

보안과 유연성을 높이기 위해 현재 디렉터리가 변경될 때마다 검색 경로를 변경할 수 있습니다. 당신의 .bashrc:

cd () { builtin cd "$@" && chpwd; }
pushd () { builtin pushd "$@" && chpwd; }
popd () { builtin popd "$@" && chpwd; }
chpwd () {
  if [[ $PATH = */node_modules/.bin/ionic ]]; then
    PATH=${PATH%:*}
  fi
  if [[ $PWD =~ ^"$HOME/dev/"[^/]* ]]; then
    project_root=${BASH_REMATCH[0]}
    PATH=$PATH:${project_root}/node_modules/.bin/inoic
  fi
}
chpwd

관련 정보