我正在使用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无论如何都要修剪它?
答案 0 :(得分:1)
尝试向命令附加重定向以将stderr发送到stdout。
SSH::into('runtime')->run(array(
'cd /home/ubuntu',
'./update.sh 2>&1'
), function ($line){
$this->line($line);
});
答案 1 :(得分: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;
那打印出来的一切