디렉토리에 들어갈 때 bash 스크립트 실행

디렉토리에 들어갈 때 bash 스크립트 실행

디렉토리에 들어갈 때 스크립트를 실행하는 가장 좋은 방법은 무엇입니까?
새 디렉터리에 들어갈 때 RVM처럼 bash가 projectSettings.bash 스크립트를 실행하도록 하고 싶습니다.

답변1

cd함수(및 pop) 를 생성 pushd하고 해당 특정 디렉터리에 들어가면 이를 감지하도록 할 수 있습니다.

cd () { builtin cd "$@" && chpwd; }
pushd () { builtin pushd "$@" && chpwd; }
popd () { builtin popd "$@" && chpwd; }
unset_all_project_settings () {
  # do whatever it takes to undo the effect of projectSettings.bash,
  # e.g. unset variables, remove PATH elements, etc.
}
chpwd () {
  case $PWD in
    /some/directory|/some/other/directory) . ./projectSettings.bash;;
    *) unset_all_project_settings;;
  esac
}

화이트리스트에 포함되지 않은 디렉토리에서는 이 작업을 수행하지 마십시오. 이렇게 하면 누군가가 당신을 속여 임의의 코드를 실행하도록 쉽게 만들 수 있습니다. 아카이브가 전송되었으므로 압축을 풀고 생성된 디렉토리로 변경한 다음 이제 공격자의 코드가 실행됩니다.

이 접근 방식은 프로젝트 작업과 관련 없는 어떤 이유로 디렉터리에 들어가더라도 스크립트가 실행된다는 의미이므로 권장하지 않습니다. 프로젝트 디렉터리를 변경하고 설정 스크립트를 가져오려면 특정 기능을 사용하는 것이 좋습니다.

myproj () {
  cd /some/directory && . ./projectSettings.bash
}

답변2

디렌프당신이 찾고있는 것일 수도 있습니다.

direnv셸의 확장입니다. 현재 디렉터리를 기반으로 환경 변수를 로드 및 언로드하는 새로운 기능으로 기존 셸을 향상합니다.

다음은 공식 문서에서 가져온 예입니다.

$ cd ~/my_project
$ echo ${FOO-nope}
nope
$ echo export FOO=foo > .envrc
.envrc is not allowed
$ direnv allow .
direnv: reloading
direnv: loading .envrc
direnv export: +FOO
$ echo ${FOO-nope}
foo
$ cd ..
direnv: unloading
direnv export: ~PATH
$ echo ${FOO-nope}
nope

답변3

이것은 내 CD 기능입니다

function cd()
{
    if [ -f .exit.sh ]; then
        source .exit.sh;
    fi

    if [ -z $* ]; then
        builtin cd ~
    else
        builtin cd "$*"
    fi

    if [ -f .enter.sh ]; then
        source .enter.sh;
    fi
}

그런 다음 ".enter.sh" 또는 ".exit.sh"에서 스크립트를 작성할 수 있습니다.

답변4

온딜터미널에 디렉토리를 입력할 때 스크립트를 실행하는 또 다른 대안입니다.

관련 정보