通过PHP CLI确定终端行/列

时间:2012-04-15 16:17:47

标签: php ssh command-line-interface stty

我知道通过stty -a命令很容易找出终端的大小参数。使用本地CLI PHP脚本时,通过system()左右获取输出完全没有问题。

但我正在通过从ssh命令启动的php脚本尝试相同的事情。可悲的是,所有stty永远都会回来:

stty: standard input: Invalid argument.

主叫代码是:

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

所以问题是:如果我可以输出到终端并从中读取输入(例如,从STDIN可以fread()而在PHP中可以fwrite()到STDOUT,也不应该stty有有效的STDIN和STDOUT?

1 个答案:

答案 0 :(得分: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