2012-04-15 18 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