.bashrc를 사용하여 PWD에 따라 /usr/bin/env의 실행을 수정합니다.

.bashrc를 사용하여 PWD에 따라 /usr/bin/env의 실행을 수정합니다.

shebang을 사용하는 파일이 해당 디렉터리에 따라 PATH를 조정하도록 .bashrc파일을 작성하려고 합니다 .#!/usr/bin/env

내 다음은 이미 내가 원하는 것을 달성했습니다 ~/.bashrc.

function env() {
    case $PWD/ in
        /var/www/php73/*)
            PATH=~/bin73;;
        /var/www/php8.1/*)
            PATH=~/bin81;;
    esac
    /usr/bin/env "$@"
}

그런 다음 하위 디렉터리 env에서 호출 하는 경우 필요에 따라 경로에 포함합니다./var/www/php73~/bin73

문제는 #!/usr/bin/env.bashrc가 전체 경로가 있는 프로그램 env이 아니라 function 만 정의하기 때문에 shebang을 사용하는 파일에서는 이것이 작동하지 않는다는 것입니다.env

shebang을 사용할 때 수정할 수 있나요 .bashrc? PATH그렇다면 어떻게 해야 할까요?

답변1

/usr/bin/env이에 대한 래퍼를 작성할 수 있습니다.

mv /usr/bin/env /usr/bin/env.bak
cat <<-EOF >/usr/bin/env
    #!/usr/bin/bash
    export PATH="${PWD}:${PATH}"
    /usr/bin/env.bak "$@"
EOF
chmod 755 /usr/bin/env

모든그러나 프로세스에서는 이 새로운 것을 사용합니다 env.

쉘과 그 자식들만 이 새로운 쉘을 볼 수 있도록 하려면 env이 질문에 몇 가지 해결책이 나와 있습니다.프로세스가 동일한 파일 이름을 가진 다른 파일을 읽도록 합니다.

그러나 그들 중 어느 것도 완벽하지 않습니다. 허용된 솔루션(설치 네임스페이스)을 사용하는 경우 셸에서 수행하는 모든 설치는 셸 외부에서 생성된 프로세스에 표시되지 않습니다.

관련 정보