2012-06-15 13 views
6

Ho uno script bash che devono eseguire alcuni script php e per ottenere indietro i risultati ad esempioEsegui script php da bash, assegnare l'uscita ad una variabile bash

#!/bin/bash 
/usr/bin/php -f $HOME/lib/get_fifobuild.php 

Lo script get_fifobuild.php restituisce un intero che Devo assegnare a una variabile bash. Apprezzo se qualcuno mi aiuta.

grazie :)

Edit: php show.php sceneggiatura

<?php 
    echo phpinfo(); 
    exit; 
?> 

bash:

#!/bin/bash 
HOME=`dirname $0`; 
log(){ 
    NEW_LOG=$HOME/logs/cloud-`date +%d_%m_%Y`.log 
    echo $1 >> $NEW_LOG 
} 
log "Date: `date`"; 
data=$(/usr/bin/php -f $HOME/lib/show.php); 
log $data; 

uscita:

Date: Fri Jun 15 19:16:00 PKT 2012 
phpinfo() 

senza fortuna ancora

+0

Possibile duplicato di [Assegnazione di valori stampati da CLI PHP a variabili shell] (http://stackoverflow.com/questions/4376695/assigning-values-printed-by-php-cli-to-shell-variables). Ci sono molte domande su SO sull'assegnazione dell'output di un programma alle variabili di shell. Hai fatto una ricerca? –

+1

Sì, l'ho fatto, ma senza fortuna :( – sakhunzai

+0

Hai cercato "[assegna variabile bash] (http://stackoverflow.com/search?q=bash+assign+variable)"? –

risposta

8
myvariable=$(/usr/bin/php -f $HOME/lib/get_fifobuild.php) 

assegnerà l'uscita dallo script php per una variabile chiamata "myVariable".

Aggiornamento:

Questo assegnerà l'output del comando alla variabile, ma come si continua ad avere problemi che può forse suggerire un paio di cose:

  1. che avete 'get_builds .php 'e' get_fifobuild.php 'altrove.

  2. controllare che $ HOME sia impostato correttamente. Potrebbe essere meglio con un nome di variabile diverso qui in quanto tale variabile d'ambiente è generalmente impostata sulla tua home directory. Tuttavia, è improbabile che questo sia il problema poiché si ottiene l'output dallo script.

  3. Il testo da te fornito è il esatto contenuto del file PHP? Se hai virgolette intorno a phpinfo() ad esempio, l'output sarà semplicemente la stringa "phpinfo()". In effetti, non è necessario lo echo e potresti creare il contenuto del tuo file PHP come segue.

get_fifobuild.php:

<?php 
    phpinfo(); 
?> 

Aggiornamento 2:

Provare a cambiare la sceneggiatura a:

#!/bin/bash 
HOME=`dirname $0`; 
log(){ 
    NEW_LOG=$HOME/logs/cloud-`date +%d_%m_%Y`.log 
    echo "$1" >> $NEW_LOG 
} 
log "Date: `date`"; 
data=$(/usr/bin/php -f $HOME/lib/show.php); 
log "$data"; 

In sostanza l'aggiunta di doppie virgolette le variabili nella ' log 'e' echo '. Il problema che avevi era che solo la prima riga del tuo output php veniva registrata.

+0

controlla le modifiche della domanda, Ho provato questo, ma senza fortuna – sakhunzai

+0

Vedere il mio aggiornamento Spero che sia d'aiuto! –

+0

controlla il mio esatto codice file per entrambi i file bash e php – sakhunzai

0
foobar=`/usr/bin/php -f $HOME/lib/get_fifobuild.php` 

nota: questi sono i backtick.

+0

Correggi gli spazi bianchi, per favore. – kojiro

+0

destra ... per abitudine – Rufinus

+1

Usa la convenzione' $() 'sulla convenzione' \ '\'. È più leggibile e i backtick non possono essere nidificati (mentre il può la convenzione del dollaro) – cmh