2016-03-16 8 views
5

У меня есть простой посланник. Сервер:Как я могу получить доступ к объявленной переменной в bash при выполнении задания Larvel Envoy?

@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

Аналогичная проблема: при вызове скрипта 'bash' из задачи Envoy, который включает _pipe_ (' | ';' command | grep "что-то"), это прерывает скрипт и задачу, когда он попадает в трубу. –

ответ

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, что команда отослана для запуска с помощью proc_open команды PHP.

Поскольку вход передается через 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. –

Смежные вопросы