2014-08-30 124 views
3

我使用Laravel 4和SSH命令运行以下代码。Laravel 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是否修剪它?

+0

能否请您尝试执行脚本在当前shell,比如'。 。/ update.sh'或'source。/ update.sh'?也许它只是不能捕获子shell输出... – matpop 2014-09-08 07:38:31

+0

嗨@matpop我已经运行这两个命令,并出现完整的输出。 – ajtrichards 2014-09-08 09:37:36

+0

嗨ajtrichards,你有没有用Laravel试过这些命令? Laravel的完整输出是否显示?任何变化? – matpop 2014-09-09 07:11:27

回答

0

正在发生是,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;

这一切都打印出来

+0

您好ajtrichards,它是一次打印所有输出行还是实时?意思是说,如果您有一组4个命令在性能方面很重要,是返回的值(输出)是否立即返回,还是仅在所有命令运行之后?例如,创建一组文件的副本,然后构建一组HTML文件,然后返回取出这些文件,然后通过电子邮件发送这些文件等。 – mousesports 2015-06-17 18:57:43

1

尝试在命令后附加重定向以将stderr发送到标准输出。

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