2012-04-15 11 views
1

Ich weiß, dass es ziemlich einfach ist, die Größenparameter eines Terminals über den Befehl stty -a herauszufinden. Wenn Sie lokale CLI-PHP-Skripte verwenden, gibt es keinerlei Probleme beim Abrufen dieser Ausgabe über system() oder so.Bestimmen von Terminalzeilen/Spalten über PHP CLI

Aber ich versuche das gleiche über ein PHP-Skript von einem SSH-Befehl gestartet. Leider alles, was stty jemals zurückkehrt ist:

stty: standard input: Invalid argument. 

Die Telefonvorwahl ist:

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

Die Frage ist also: Wenn ich Ausgang an den Anschluss und Eingang von ihr lesen (zB kann fread() aus ? STDIN und fwrite() zu STDOUT in PHP, sollte nicht stty haben auch gültig STDIN und STDOUT

+0

Ich hätte erwähnen sollen, dass ich versuche, etwas wie ncurses zu verwenden, nur um die Bildschirmgröße zu bekommen. – eFrane

+0

Nicht 100% sicher, aber das Ausführen einer Exec für die Terminalgröße kann zu einer falschen Größe führen, da dies die für das Skript zulässige Größe ist und nicht für das Terminal, das es ausführt. – ChrisK

+0

Dies würde zur Anforderung der Größe eines Terminals führen, das nicht zugewiesen ist, da SSH selbst keine Terminals für direkt aufgerufene Befehle zuweist. Hm. – eFrane

Antwort

2

Verwendung 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 gibt standardmäßig kein voll funktionsfähiges Terminal aus. Shells und Ncurses scheinen in der Lage zu sein, sie irgendwie zu bekommen, aber um etwas zu starten, das einen direkt von SSH benötigt, müssen Sie -t setzen.

Aus dem gleichen Grund können Sie z.B. tmux (oder screen) durch ssh'ing zu einem Server und dann tmux an der Eingabeaufforderung oder über ssh -t _server_ tmux aber nicht über sh _server_ tmux.