Bash 스크립트를 실행할 때 특정 바이너리를 강제로 사용하는 방법은 무엇입니까?
"php" 바이너리를 사용하는 bash 스크립트가 있습니다.
내 컴퓨터에는 여러 PHP 버전이 있습니다. PATH 변수를 통해 구성된 기본 PHP 바이너리는 이 예에서 사용된 바이너리가 아닙니다.
일반적으로 스크립트는 다음과 같이 실행됩니다.
./script.sh
다음과 같은 것이 필요합니다.
php=/usr/bin/php ./script.sh
참고: 이 명령에 대해서만 PATH 변수를 임시로 변경할 수는 없습니다. 이는 다른 종속성에 영향을 미치기 때문입니다.
스크립트는 여러 사람이 사용하므로 스크립트에 하드코딩하는 것도 옵션이 아닙니다. 따라서 다른 사람이 스크립트를 실행할 때 PATH 변수에 지정된 기본 PHP 바이너리만 사용해야 합니다.
변수를 통해 액세스할 수 있는 것을 원하지 않습니다. 실제로 바이너리를 찾을 정확한 위치를 지정하고 싶습니다. 일반적으로 PATH에서 수행되는 것처럼 이는 이제 절대 경로가 있는 단일 바이너리에 대해서만 작동합니다. 이 스크립트가 다른 스크립트를 호출하는 경우 두 번째 스크립트도 해당 PHP 버전을 사용해야 합니다. –
답변1
이것은 작동합니다:
php() { /path/to/your/php $@; }; export -f php; ./script.sh ; unset -f php
그것을 파괴:
php() { /path/to/your/php $@; };
제공한 PHP 경로에 모든 인수를 전달하는 쉘 함수를 정의하십시오.
export -f php
스크립트에서 사용하기 위해 새로 생성된 함수 내보내기
./script.sh
스크립트를 실행하세요
unset -f php
앞서 정의한 쉘 함수를 삭제합니다.
답변2
한 가지 방법은 스크립트에 추가 변수를 추가하는 것입니다.
PHP=$1
if [ -z $PHP ]; then
PHP=php
fi
그런 다음 아무것도 지정하지 않고 실행하면 기본 PHP 바이너리가 사용됩니다. 그렇지 않으면 변수를 통해 전달하는 것을 사용합니다.
./script.sh /usr/bin/php
답변3
$ hash /usr/local/bin php
$ php file.php
돕다:
$ LANG=C help hash
hash: hash [-lr] [-p pathname] [-dt] [name ...]
Remember or display program locations.
Determine and remember the full pathname of each command NAME. If
no arguments are given, information about remembered commands is displayed.
Options:
-d forget the remembered location of each NAME
-l display in a format that may be reused as input
-p pathname use PATHNAME is the full pathname of NAME
-r forget all remembered locations
-t print the remembered location of each NAME, preceding
each location with the corresponding NAME if multiple
NAMEs are given
Arguments:
NAME Each NAME is searched for in $PATH and added to the list
of remembered commands.
Exit Status:
Returns success unless NAME is not found or an invalid option is given.
답변4
당신은 말한다참고: 이 명령에 대해서만 PATH 변수를 임시로 변경할 수는 없습니다. 이는 다른 종속성에 영향을 미치기 때문입니다., 하지만 올바르게 수행한다면 선택 사항이라고 생각합니다.
다음을 포함하는 개인 디렉터리를 만들 수 있습니다.오직원하는 경우 php
해당 개인 디렉터리를 자신의 PATH에 첫 번째 디렉터리로 둡니다. 이 개인 PATH 항목은 php
다른 PATH 종속성에 영향을 주지 않고 해당 바이너리만 찾도록 셸에 영향을 줍니다 . 스크립트를 실행하는 다른 사람들은 PATH를 사용하지 않으므로 영향을 미치지 않습니다. 예를 들어:
$ mkdir -p "$HOME/myphp"
$ ln -s /usr/bin/php "$HOME/myphp/"
$ PATH=$HOME/myphp:$PATH
$ ./script.sh
위의 방법은 하나의 php
프로그램에만 영향을 미치고 다른 프로그램에는 영향을 미치지 않으며 귀하에게만 영향을 미치고 다른 누구에게도 영향을 미치지 않습니다.
물론, 실행하는 명령만 이 버전을 사용하도록 계정의 셸 시작 파일에 새 PATH 정의를 넣을 수 있습니다 php
.