我知道通过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?
答案 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
。