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

标签 php laravel bash laravel-envoy

我有简单的 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 未分配,或超出下一行的范围。

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

最佳答案

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 是否会尝试自己进行第一次转义。

关于php - 执行 Laravel Envoy 任务时如何访问 bash 中声明的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36037473/

相关文章:

php - 根据路由组在错误页面中加载页脚

php - Laravel 多数据库,一个数据库存储用户

python - 发现 Boto 异常 NoAuthHandler

bash - 如何使用zenity查找.mp3文件

php - 无法获取 php.ini 的更新值

php - Laravel Controller 功能全局应用

php - zend 框架 : "A project profile was not found" zf version 1. 11.7

regex - ngrep 如何使匹配表达式不区分大小写?

php - 为 PHPUnit 的模拟对象定义类型

php - 支持 PHP v2 的轻量级开发 Web 服务器