bashからPHPに変数を渡す際にエラーが発生しました。

bashからPHPに変数を渡す際にエラーが発生しました。

次のファイルがあります。

変数.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`

おすすめ記事