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

У меня есть простая настройка посланника. Сервер:

@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
  1. $(pwd) Команда оценивается локально.
  2. переменная var_1 либо не назначен, либо выходит за рамки следующей строки.

Это ожидаемое поведение? Есть ли обходной путь для этого?

Спасибо за помощь!

5

Решение

Глядя на код, мы можем видеть метод, используемый для передачи команд. Сначала команда строится:

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

Обратите внимание, что вам может понадобиться двойной побег, но вы не уверены, что посланник попытается взять первый побег для себя.

1

Другие решения

Других решений пока нет …