Erro ao passar a variável do bash para o php

2

Eu tenho os seguintes arquivos:

vars.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'

Quando executo de cli:

[me]# php -f Ascript.php 1234567890

Não há problema!

Mas se eu executar:

[me]# ./Bscript.sh

(Bscript tem 755 permissões) Eu entendo isso:

Identifier: 1234567890
./Bscript.sh: line 4: 1234567890: command not found

Mesmo se eu escrever o valor diretamente no meu Bscript.sh

...
'php -f /root/Ascript.php 1234567890'

Eu recebo o mesmo erro.

    
por M_Mike 12.11.2014 / 05:50

1 resposta

2

O problema são os backticks ao redor da linha

php -f /root/Ascript.php $C

Eles significam para o shell: "Execute o comando no meio, colete sua saída (somente isso para stdout ) e, em seguida, substitua os backticks e tudo o que estiver no meio da saída.

Como não há mais nada nessa linha, a saída ( 1234567890 ) é considerada um comando. Apenas remova os backticks.

Você pode verificar com a inclusão de um echo :

echo 'php -f /root/Ascript.php $C'
    
por 12.11.2014 / 06:13