【问题标题】:Laravel SSH Ouput not returning full output contentLaravel SSH 输出未返回完整的输出内容
【发布时间】:2014-09-12 18:10:58
【问题描述】:

我正在使用 Laravel 4 和 SSH 命令运行以下代码。

SSH::into('runtime')->run(array(
   'cd /home/ubuntu',
   './update.sh'
), function ($line){

   echo $line.PHP_EOL;

});

SSH 命令运行良好,update.sh 文件的内容运行。不过……

如果我从命令行运行 update.sh 脚本,输出是:

Already up-to-date. (This part of the message depends on the output of git pull)
Stopping nginx: nginx.
Starting nginx: nginx.

运行 Laravel 代码时返回的内容:

nginx.

有没有办法获得完整的输出,或者 Laravel 是否会对其进行修剪?

【问题讨论】:

  • 能否请您尝试在当前shell 中执行脚本,例如. ./update.shsource ./update.sh?也许它只是无法捕获 subshel​​l 输出...
  • 嗨@matpop 我已经运行了这两个命令并显示了完整的输出。
  • 嗨 ajtrichards,你用 Laravel 试过这些命令吗? Laravel 是否会显示完整的输出?有什么变化吗?
  • 是的,我已经在 Laravel 中运行了命令,但没有任何变化 :-(

标签: laravel laravel-4


【解决方案1】:

尝试将重定向附加到命令以将标准错误发送到标准输出。

SSH::into('runtime')->run(array(
    'cd /home/ubuntu',
    './update.sh 2>&1'
), function ($line){
    $this->line($line);
});

【讨论】:

    【解决方案2】:

    发生的问题是 update.sh 正在运行 3 个命令,而 Laravel SSH 函数仅返回输出的最后一部分,因为我用来捕获的变量不断被覆盖。

    我在课堂上创建了一个私有变量:

    private $output;
    

    然后将我的 SSH 运行代码更改为:

    SSH::into('runtime')->run(array(
       'cd /home/ubuntu',
       './update.sh'
    ), function ($line){
    
       $this -> output .= $line.PHP_EOL;
    
    });
    

    为此,我将$line 的输出附加到我的输出变量中。然后我可以使用以下命令访问我的输出:

    echo $this -> output;

    把所有东西都打印出来了

    【讨论】:

    • 嗨ajtrichards,这会一次打印所有输出行吗?还是实时的?意思是,如果您有一组 4 个在性能方面非常重要的命令,返回值(输出)是立即返回还是仅在所有命令运行后返回?例如,创建一组文件的副本,然后构建一组 HTML 文件,然后备份这些文件,然后通过电子邮件发送这些文件,等等。
    猜你喜欢
    • 2014-09-17
    • 1970-01-01
    • 1970-01-01
    • 2019-08-29
    • 1970-01-01
    • 2012-04-29
    • 1970-01-01
    • 2014-07-28
    • 1970-01-01
    相关资源
    最近更新 更多