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
이 질문에 몇 가지 해결책이 나와 있습니다.프로세스가 동일한 파일 이름을 가진 다른 파일을 읽도록 합니다.
그러나 그들 중 어느 것도 완벽하지 않습니다. 허용된 솔루션(설치 네임스페이스)을 사용하는 경우 셸에서 수행하는 모든 설치는 셸 외부에서 생성된 프로세스에 표시되지 않습니다.