【问题标题】:Determining Terminal lines/cols via PHP CLI通过 PHP CLI 确定终端行/列
【发布时间】:2012-04-15 16:17:46
【问题描述】:

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

但我正在通过从 ssh 命令启动的 php 脚本尝试相同的操作。可悲的是,stty 返回的只是:

stty: standard input: Invalid argument.

调用代码是:

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

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

【问题讨论】:

  • 我应该提到我试图避免使用像 ncurses 这样的东西来获取屏幕大小。
  • 不是 100% 确定,但是对终端大小执行 exec 可能会导致大小不正确,因为它将是脚本允许的大小,而不是执行它的终端。
  • 这将导致请求未分配的终端大小,因为 SSH 本身不会为直接调用的命令分配终端。嗯。
  • 您可以尝试 exec('tput cols') 和 exec('tput lines'),这可能会提供一些信息,再次使用上述免责声明。
  • 另外,看起来会是 ncurses。

标签: php ssh command-line-interface stty


【解决方案1】:

使用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 连接到服务器并然后在提示符处或通过 ssh -t _server_ tmux 而不是通过 sh _server_ tmux 输入 tmux 来启动 tmux(或屏幕)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-14
    • 2019-05-04
    • 1970-01-01
    • 2012-09-27
    • 2012-06-03
    • 2014-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多