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 path한 줄에서 변수를 생성하면 $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. 두 번째 문자열이 표시됩니다. 오류 메시지에서 이것이 문제라는 것을 확인할 수도 있습니다.

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

그러니 해당 read path줄을 삭제하세요.

관련 정보