在执行Laravel Envoy任务时如何在bash中访问声明的变量?

时间:2016-03-16 13:44:29

标签: php laravel 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未分配,或未在下一行的范围之外。

  3. 这是预期的行为吗?它有解决方法吗?

2 个答案:

答案 0 :(得分:2)

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

请注意,您可能需要双重逃避,不确定Envoy是否会尝试为自己进行第一次逃脱。

答案 1 :(得分:0)

如果需要,您可以使用命令行将选项值传递给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