Como posso forçar o uso de um binário específico ao executar um script

3

Como posso forçar um binário específico a ser usado ao executar um script bash?

Eu tenho um script bash que usa o binário "php".

Existem várias versões do php no meu computador. O principal binário do php, como configurado através da variável PATH, não é o único a ser usado neste caso.

Normalmente, o script será executado assim:

./script.sh

Eu preciso de algo assim:

php=/usr/bin/php ./script.sh

NOTA: Não é uma opção para alterar temporariamente a variável PATH apenas para este comando, porque isso afetará outras dependências.

Codificar no script também não é uma opção, porque o script é usado por várias pessoas. Então, quando outras pessoas executam o script, ele deve usar apenas o binário php principal, conforme especificado na variável PATH.

Eu não quero que seja acessível por meio de uma variável. Eu realmente quero especificar o local exato para procurar o binário. Assim como normalmente faria usando o PATH, somente agora para um único binário com o caminho absoluto para ele. Se esse script chamar outro script, esse segundo script também precisará usar essa versão do php. -

    
por Nick Stemerdink 18.10.2013 / 16:15

4 respostas

1

Você diz NOTA: Não é uma opção para alterar temporariamente o PATH variável apenas para este comando, porque isso afetará outros dependências , mas eu acho que é uma opção se você fizer isso direito.

Você pode criar um diretório pessoal que tenha somente seu php desejado em e coloque esse diretório pessoal primeiro em seu próprio PATH. Que pessoal A entrada PATH afetará o shell, encontrando apenas um php binário, e não afeta quaisquer outras dependências do PATH. Outras pessoas correndo o O script não usa o seu PATH, por isso não irá afetá-los. Por exemplo:

$ mkdir -p "$HOME/myphp"
$ ln -s /usr/bin/php "$HOME/myphp/"
$ PATH=$HOME/myphp:$PATH
$ ./script.sh

O método acima afeta apenas o programa php , nada mais, e somente afeta-o para você, não para qualquer outra pessoa.

Claro que você pode colocar sua nova definição PATH na inicialização do shell arquivo para sua conta, de modo que apenas os comandos que você executar usarão essa versão de php .

    
por 19.10.2013 / 04:49
5

Isso funcionaria:

php() {  /path/to/your/php $@; }; export -f php; ./script.sh ; unset -f php

Para dividir:

php() {  /path/to/your/php $@; }; 

Define uma função do shell que passará todos os seus argumentos para o caminho do PHP que você fornece.

export -f php

Exporta a função recém-criada para uso dentro do seu script

./script.sh

Executa seu script

unset -f php

Remove a função de shell que definimos anteriormente.

    
por 18.10.2013 / 16:51
2

Uma maneira de fazer isso seria adicionar uma variável adicional ao seu script:

PHP=$1
if [ -z $PHP ]; then
    PHP=php
fi

Então, se você executá-lo sem especificar nada, ele usará o binário padrão do PHP. Senão, vai usar o que você vai passar pela sua variável

./script.sh /usr/bin/php
    
por 18.10.2013 / 16:44
2
$ hash /usr/local/bin php
$ php file.php

ajuda:

$ 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.
    
por 19.10.2013 / 02:04