2

コマンドを使用して端末のサイズパラメーターを簡単に把握できることを知っています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 も持つべきではありませんか?

4

1 に答える 1

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 は完全に機能する端末を渡しません。シェルと ncurses は何とかそれらを取得できるようですが、SSH から直接必要なものを起動するには、-t を設定する必要があります。

同じ理由で、たとえば、サーバーに ssh して tmux (または画面) を起動し、プロンプトまたは を介し​​て tmux を入力しますssh -t _server_ tmux、 を介しては実行できませんsh _server_ tmux

于 2012-04-15T17:24:29.130 に答える