스크립트를 실행할 때 특정 바이너리를 강제로 사용하는 방법

스크립트를 실행할 때 특정 바이너리를 강제로 사용하는 방법

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.

관련 정보