2016-03-16 16 views
5

Ho una semplice configurazione di Envoy. Un server:Come accedere alla variabile dichiarata in bash quando si esegue l'attività di Laravel Envoy?

@servers(['ws' => 'ws.sk']) 

... e semplice operazione "ping":

@task('ping-ws', ['on' => 'ws']) 
    echo "Hello world from WS server!" 
    echo $(pwd) 
    pwd 
    var_1="Hello" 
    echo "${var_1}" 
@endtask 

Dove vorrei assegnare alcuni valori alle variabili e accedervi in ​​seguito. Anche se il risultato è abbastanza inaspettato:

envoy run ping-ws 
Hello world from WS server! 
/Users/davidlukac/dev/drupal/_devdesktop/davidlukac 
/home 
  1. Il comando $(pwd) viene valutata a livello locale.
  2. La variabile var_1 non è assegnata o fuori ambito nella riga successiva.

È questo comportamento previsto? C'è una soluzione per questo?

Grazie per l'aiuto!

+0

Problema simile: quando si richiama uno script 'bash' da un'attività Envoy, che include _pipe_ (' | ';' comando | grep "qualcosa" '), questo interrompe lo script e l'attività, quando arriva alla pipe. –

risposta

1

Looking at the code, possiamo vedere il metodo utilizzato per passare i comandi. In primo luogo il comando è costruito:

ssh ws.sk 'bash -se' << EOF-LARAVEL-ENVOY 
echo "Hello world from WS server!" 
echo $(pwd) 
pwd 
var_1="Hello" 
echo "${var_1}" 
EOF-LARAVEL-ENVOY 

E then, che il comando viene espulso per essere eseguito per ordine di PHP proc_open.

Poiché l'input viene passato tramite STDIN, viene interpretato dall'ambiente locale prima di essere inviato. Puoi copiare e incollare quanto sopra nel tuo terminale per vedere la stessa cosa.

Tutto ciò che serve è sfuggire a qualsiasi carattere che potrebbe essere interpretato dall'ambiente locale; in questo caso, i caratteri $.

@task('ping-ws', ['on' => 'ws']) 
    echo "Hello world from WS server!" 
    echo \$(pwd) 
    pwd 
    var_1="Hello" 
    echo "\${var_1}" 
@endtask 

Nota potrebbe essere necessario doppia fuga, non so se l'inviato cercherà di prendere la prima fuga per se stesso.

+0

Escaping '$' s funziona davvero! Molte grazie! –

+0

Felice di aiutare. Suggerirei che questo dovrebbe essere archiviato come un bug nel prodotto. Dovrebbe fare la fuga per te in fase di esecuzione. – miken32

+1

Problema pubblicato su https://github.com/laravel/framework/issues/12768. –