我有以下文件:
变量.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
它们对 shell 的意思是:“执行中间的命令,收集其输出(仅到stdout
),然后用输出替换反引号和中间的所有内容。
由于该行上有其他注释,输出 ( 1234567890
) 被视为命令。只需删除反引号即可。
您可以通过在前面添加以下内容来检查echo
:
echo `php -f /root/Ascript.php $C`