2014-08-30 40 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); 
});