执行 Laravel Envoy 任务时如何访问 bash 中声明的变量?
How can I access declared variable in bash when executing Laravel Envoy task?
我有简单的 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
$(pwd)
命令在本地求值。
变量 var_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, that command is sent off to be run by PHP's proc_open
命令。
由于输入是通过 STDIN 传递的,因此在发送之前会由您的本地环境进行解释。您可以将上面的内容复制并粘贴到您的终端中以查看相同的内容。
所需要的只是转义任何可能被本地环境解释的字符;在这种情况下,$
个字符。
@task('ping-ws', ['on' => 'ws'])
echo "Hello world from WS server!"
echo $(pwd)
pwd
var_1="Hello"
echo "${var_1}"
@endtask
注意你可能需要两次转义,不确定Envoy是否会尝试自己进行第一次转义。
如果需要,您可以使用命令行将选项值传递到 Envoy 任务中:
envoy run deploy --branch=master
您可以通过 Blade 的 "echo" 语法访问任务中的选项。当然,您也可以在任务中使用 if 语句和循环。例如,让我们在执行 git pull 命令之前验证 $branch 变量的存在:
@servers(['web' => '192.168.1.1'])
@task('deploy', ['on' => 'web'])
cd site
@if ($branch)
git pull origin {{ $branch }}
@endif
php artisan migrate
@endtask
来自特使官方文档,欢迎大家阅读learn more
如果您想添加多个变量,只需添加您需要的变量即可。
envoy run deploy --var1=var1Value --var2=var2Value
我有简单的 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
$(pwd)
命令在本地求值。变量
var_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, that command is sent off to be run by PHP's proc_open
命令。
由于输入是通过 STDIN 传递的,因此在发送之前会由您的本地环境进行解释。您可以将上面的内容复制并粘贴到您的终端中以查看相同的内容。
所需要的只是转义任何可能被本地环境解释的字符;在这种情况下,$
个字符。
@task('ping-ws', ['on' => 'ws'])
echo "Hello world from WS server!"
echo $(pwd)
pwd
var_1="Hello"
echo "${var_1}"
@endtask
注意你可能需要两次转义,不确定Envoy是否会尝试自己进行第一次转义。
如果需要,您可以使用命令行将选项值传递到 Envoy 任务中:
envoy run deploy --branch=master
您可以通过 Blade 的 "echo" 语法访问任务中的选项。当然,您也可以在任务中使用 if 语句和循环。例如,让我们在执行 git pull 命令之前验证 $branch 变量的存在:
@servers(['web' => '192.168.1.1'])
@task('deploy', ['on' => 'web'])
cd site
@if ($branch)
git pull origin {{ $branch }}
@endif
php artisan migrate
@endtask
来自特使官方文档,欢迎大家阅读learn more
如果您想添加多个变量,只需添加您需要的变量即可。
envoy run deploy --var1=var1Value --var2=var2Value