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`

관련 정보