ionCube シェルスクリプトでエラーが発生する

ionCube シェルスクリプトでエラーが発生する

ionCubeローダーをインストールするための次のシェルスクリプトがあります。

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"

CentOS 6.5 Finalこの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

次のエラーが発生します。

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

17行目:

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

このエラーは、コンテンツが$path存在しないことを示します。$path( ) コマンドを手動で実行しようとすると、php -i|grep php.ini | awk 'NR==2{print $5}'出力は次のようになります。

/usr/local/lib/php.ini

17行目を実行しようとしていますが、$pathコマンドの実際の出力に置き換えようとしたとき(もちろんこの出力も置き換えます$version):

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

コマンドが成功しました。

ここで何が間違っているのかわかりません。

答え1

問題は、read path1行で変数を作成すると、$path次の行でその変数を空白に戻すことです。

## 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

echo "$path"17行目の後にも空の文字列を印刷すると、これを行うことができますread path。 2番目の文字列が表示されます。エラーメッセージでこれが問題であることを確認することもできます。

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

だからread pathその行を削除してください。

関連情報