2016-03-16 4 views
5

私は簡単なエンボイ設定をしています。サーバー:Laravel Envoyタスクを実行するときに、bashで宣言された変数にアクセスする方法はありますか?

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

...と、単純な「ピング」タスク:私は、変数に何らかの値を代入し、後でそれらにアクセスしたい

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

。結果はかなり予想外ですが:

envoy run ping-ws 
Hello world from WS server! 
/Users/davidlukac/dev/drupal/_devdesktop/davidlukac 
/home 
  1. $(pwd)コマンドはローカルで評価されます。
  2. 変数var_1は、割り当てられていないか、次の行のスコープから外れています。

この現象は予期しないものですか?それを回避する方法はありますか?

ありがとうございました!

+0

同様の問題:_pipe_( '|'; 'command | grep" something ")を含むEnvoyタスクから' bash'スクリプトを呼び出すと、パイプに到達するとスクリプトとタスクが中断されます。 –

答えて

1

Looking at the codeを参照すると、コマンドを渡すために使用されているメソッドがわかります。最初のコマンドが構築されています:

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 

そしてthenを、そのコマンドは、PHPのproc_openコマンドによって実行されるようにオフに送信されます。

入力がSTDIN経由で渡されているため、送信前にローカル環境によって解釈されています。上記をコピーして端末に貼り付けて、同じことを見ることができます。

ローカル環境で解釈される可能性のある文字をエスケープするだけです。この場合、$文字になります。

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

あなたは特使が自身のためにエスケープ最初を取るしようとする場合には必ず、二重のエスケープにはないが必要な場合があります。

+0

実際に '$'をエスケープすると動作します!どうもありがとう! –

+0

喜んで助けてください。私は、これが製品のバグとして提出されるべきだと提案します。実行時にエスケープする必要があります。 – miken32

+1

https://github.com/laravel/framework/issues/12768で発行された問題。 –

関連する問題