2012-04-15 53 views
1

我知道通過stty -a命令找出終端的尺寸參數是相當容易的。當使用本地CLI PHP腳本時,通過system()左右抓取該輸出沒有任何問題。通過PHP CLI確定終端線路/列隊

但我想通過一個從ssh命令啓動的php腳本來做同樣的事情。可悲的是,所有stty永遠返回是:

stty: standard input: Invalid argument. 

調用代碼:

exec('stty -a | head -n 1', $query); 
echo $query[0]; 

所以,問題是:如果我能輸出到終端,並從中讀取輸入(例如可以fread()從?STDIN和fwrite()到STDOUT在PHP,不應該stty也有有效的STDIN和STDOUT

+0

我應該提到,我試圖避免使用類似ncurses的東西來獲得屏幕大小。 – eFrane 2012-04-15 16:24:15

+0

不是100%確定,但對終端大小執行exec可能會導致大小不正確,因爲它將是腳本允許的大小,而不是執行終端的大小。 – ChrisK 2012-04-15 16:28:40

+0

這將導致請求未分配的終端的大小,因爲SSH本身不會爲直接調用的命令分配終端。嗯。 – eFrane 2012-04-15 16:32:04

回答

2

使用ssh -t

% php ~/src/termtest.php 
speed 9600 baud; 39 rows; 127 columns; 
% ssh localhost php ~/src/termtest.php 
stty: stdin isn't a terminal 
% ssh -t localhost php ~/src/termtest.php 
speed 9600 baud; 39 rows; 127 columns;Connection to localhost closed. 

默認情況下,SSH沒有通過全功能終端。 shell和ncurses似乎能夠以某種方式獲得它們,但是爲了直接從SSH啓動需要的東西,您需要設置-t。

出於同樣的原因,您可以例如通過ssh'ing向服務器發送tmux(或屏幕),然後然後在提示符處或通過ssh -t _server_ tmux鍵入tmux,但不通過sh _server_ tmux