o script de shell ionCube dá erro

2

Eu tenho este script de shell para instalar o ionCube loader:

if [[ $(id -u) -ne 0 ]] ; then echo "Please run as root" ; exit 1 ; fi
echo "Welcome to this script to install the ionCube loader on CentOS!"
cd /usr/local/src
wget http://downloads2.ioncube.com/loader_downloads/ioncube_loaders_lin_x86-64.tar.gz
tar zxvf ioncube_loaders_lin_x86-64.tar.gz
cd  ioncube
mkdir /usr/local/ioncube
echo "Please specify which PHP version you are using (e.g.: 5.3)."
read version
cp ioncube_loader_lin_"$version".so /usr/local/ioncube
path=$(php -i|grep php.ini | awk 'NR==2{print $5}')
read path
echo "zend_extension = /usr/local/ioncube/ioncube_loader_lin_"$version".so" >> "$path"

Quando eu tento executá-lo em CentOS 6.5 Final com esta versão do PHP ( php -v ):

PHP 5.3.28 (cli) (built: Jun 23 2014 16:25:09) 
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2013 Zend Technologies

Eu recebo o seguinte erro:

./ioncube.sh: line 17: : File or folder doesn't exist

Linha 17:

echo "zend_extension = /usr/local/ioncube/ioncube_loader_lin_"$version".so" >> "$path"

O erro indica que $path não existe. Quando tento executar manualmente o comando de $path ( php -i|grep php.ini | awk 'NR==2{print $5}' ), a saída é:

/usr/local/lib/php.ini

Quando tento executar a linha 17, mas substituo $path pela saída real do comando (é claro que também substituirei $version ):

echo "zend_extension = /usr/local/ioncube/ioncube_loader_lin_"5.3".so" >> "/usr/local/lib/php.ini"

O comando é bem sucedido.

Eu não entendo o que está errado aqui.

    
por William Edwards 23.08.2014 / 13:10

1 resposta

1

O problema é o read path . Enquanto uma linha cria a variável $path , a próxima configura em branco novamente:

## This line will set the $path variable.
path=$(php -i|grep php.ini | awk 'NR==2{print $5}')
## This one expects to read the value of $path from standard input 
## so it sets it to empty unless input is given.
read path

Você pode testar isso adicionando echo "$path" após a linha 17 e também após o read path . Você verá que o segundo imprime uma string vazia. Você também pode ver que esse é o problema na sua mensagem de erro:

./ioncube.sh: line 17: : File or folder doesn't exist
                     ---
                      |---------> this should be the file name

Então, basta excluir a linha read path .

    
por 23.08.2014 / 13:42