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

Dav*_*kac 6 php bash laravel laravel-envoy

我有简单的特使设置.服务器:

@servers(['ws' => 'ws.sk'])
Run Code Online (Sandbox Code Playgroud)

......和简单的"ping"任务:

@task('ping-ws', ['on' => 'ws'])
    echo "Hello world from WS server!"
    echo $(pwd)
    pwd
    var_1="Hello"
    echo "${var_1}"
@endtask
Run Code Online (Sandbox Code Playgroud)

我想在哪里为变量赋值并稍后访问它们.虽然结果很意外:

envoy run ping-ws
Hello world from WS server!
/Users/davidlukac/dev/drupal/_devdesktop/davidlukac
/home
Run Code Online (Sandbox Code Playgroud)
  1. $(pwd)命令在本地进行评估.
  2. 变量var_1未分配,或在下一行超出范围.

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

谢谢您的帮助!

mik*_*n32 2

查看代码,我们可以看到用于传递命令的方法。首先构建命令:

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
Run Code Online (Sandbox Code Playgroud)

然后该命令被发送以由 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
Run Code Online (Sandbox Code Playgroud)

请注意,您可能需要两次转义,不确定 Envoy 是否会尝试自行进行第一次转义。