У меня есть простая настройка посланника. Сервер:
@servers(['ws' => 'ws.sk'])
… и простая задача «ping»:
@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
$(pwd)
Команда оценивается локально.var_1
либо не назначен, либо выходит за рамки следующей строки.Это ожидаемое поведение? Есть ли обходной путь для этого?
Спасибо за помощь!
Глядя на код, мы можем видеть метод, используемый для передачи команд. Сначала команда строится:
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
А также затем, эта команда отправляется для запуска 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
Обратите внимание, что вам может понадобиться двойной побег, но вы не уверены, что посланник попытается взять первый побег для себя.
Других решений пока нет …