다음 파일이 있습니다.
변수.txt
C=1234567890
Ascript.php
#!/usr/bin/php
<?php
var $C="$argv[1]";
echo "\n $C \n";
$con = mysql_connect('localhost','root','123') or die ("No connected");
mysql_select_db("test_database",$con);
if($C !=''){
$rs = mysql_query("SELECT name FROM test_table WHERE `identifier`= '$C'");
while($fields = mysql_fetch_row($rs)){
$file = fopen("/var/log/Test/Result.txt","a") or die ("No created");
for ($i=0, $x=count($fields); $i < $x; $i++){
fputs($file, "$fields[$i]\n");
fclose($file);
}
}
}
else {
echo "There is not identifier \n";
}
mysql_close($con);
?>
Bscript.sh
#!/bin/bash
C=`grep -oPa '[Cc]=[^\s]+' /var/log/Test/vars.txt|cut -d= -f2|sed -e 's/-//'`
echo -e "Identifier: $C"
`php -f /root/Ascript.php $C`
CLI에서 실행할 때:
[me]# php -f Ascript.php 1234567890
여기서는 문제 없습니다!
하지만 내가 실행하면:
[me]# ./Bscript.sh
(Bscript에는 755개의 권한이 있습니다.) 나는 이것을 얻습니다:
Identifier: 1234567890
./Bscript.sh: line 4: 1234567890: command not found
Bscript.sh에 직접 값을 써도
...
`php -f /root/Ascript.php 1234567890`
나도 같은 실수를 저질렀다.
답변1
문제는 라인 주변의 백틱입니다.
php -f /root/Ascript.php $C
셸에 대한 의미는 다음과 같습니다. "그 사이에 명령을 실행하고 출력을 수집한 stdout
다음(만) 백틱과 그 사이의 모든 항목을 출력으로 바꿉니다.
해당 행의 다른 주석으로 인해 출력( 1234567890
)은 명령으로 처리됩니다. 백틱만 제거하세요.
앞에 다음을 추가하여 이를 확인할 수 있습니다 echo
.
echo `php -f /root/Ascript.php $C`