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 path
1行で変数を作成すると、$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
その行を削除してください。