PHP-Ausgabe, die an "less" geleitet wird, ist erforderlich <enter> nach jedem Befehl </enter>

1176
Eddified

Wenn Sie die PHP-Ausgabe an den Linux-Befehl "less" weiterleiten, wird "less" wirklich aktiviert. (CentOS 6.2, ist mit CentOS 5 nicht passiert.)

Wenn ich die Ausgabe von PHP in 'less' übergebe, muss die enterTaste nach jedem Befehl gedrückt werden, auch nach dem Befehl 'j' (der Befehl, um eine Zeile nach unten zu scrollen). Darüber hinaus wird die Befehlstaste auf dem Bildschirm angezeigt, und "weniger" bereinigt den Bildschirm nicht.

Also nach dem Laufen:

$ php -r 'for ($i=0; $i<300; $i++) { print "$i\n";}' | less 

und dann tippe j(was normalerweise eine Zeile nach unten rollen) sehe ich ein 'j' Zeichen, das am unteren Rand des Bildschirms nach dem ':' - Zeichen erscheint. Das Drücken enterbewirkt, dass weniger den Befehl j letztendlich "annimmt", und es wird tatsächlich gescrollt, aber jetzt sehe ich das ": j" zwischen zwei benachbarten Zeilen der Ausgabe:

10 :j 11 

Wenn Sie weniger mit der entsprechenden Ausgabe von Python verwenden, ist alles in Ordnung und wirkt normalerweise weniger:

$ python -c 'for i in xrange(1, 300): print i' | less 

Was ist los und wie kann ich das beheben?

Mehr Info:

$ less --version less 436 Copyright (C) 1984-2009 Mark Nudelman  less comes with NO WARRANTY, to the extent permitted by law. For information about the terms of redistribution, see the file named README in the less distribution. Homepage: http://www.greenwoodsoftware.com/less  $ php --version PHP 5.3.27 (cli) (built: Aug 26 2013 11:46:37) Copyright (c) 1997-2013 The PHP Group Zend Engine v2.3.0, Copyright (c) 1998-2013 Zend Technologies 

Ich verwende Terminal.app unter Mac OS X für ssh an die Box und führe dann den php-Befehl aus.

5
Its probably a terminal setting (what does echo $TERM say). I tried the same script in my CentOS 6.2 box and it worked as expected. I wonder if it might be to do with the way your terminal is intepreting CR and LF. What happens if you use "\r\n" rather then just "\n" ? davidgo vor 10 Jahren 1
Der $ TERM ist "Bildschirm". :) Wenn ich es ohne Bildschirm versuche, sagt es 'xterm-256color' und funktioniert trotzdem nicht richtig. Eddified vor 10 Jahren 0
Dies ist auch in Ubuntu 13.04 und Debian Testing nicht der Fall. Ich würde die weniger Implementierung dafür verantwortlich machen. Braiam vor 10 Jahren 0
Welche Version von CentOS 5 hat dies funktioniert? Ich bin auf 5.9 und zeigt die gleichen Probleme, die Sie für 6.2 hervorheben. slm vor 10 Jahren 0
Es funktioniert korrekt auf meiner CentOS 5.5-Installation. Eddified vor 10 Jahren 0
Please could you add following details: `less --version` and `php --version`? PS Could be that PHP recognizes only `php -v` for querying the version number. t0r0X vor 10 Jahren 0
Weitere Fragen: Versuchen Sie dies in einem Terminalfenster in einer grafischen Umgebung, direkt in einer nicht grafischen Konsole oder über ein Terminal / ssh / telnet-Programm? t0r0X vor 10 Jahren 0

2 Antworten auf die Frage

7
Rik

Bearbeiten:

Die Lösung gefunden: Sie müssen < /dev/nullnach dem PHP-Befehl einen Befehl ausführen:

php -r 'for ($i=0; $i<300; $i++) { print "$i\n";}' < /dev/null | less 

Offenbar verhält sich PHP anders, weil es noch Eingaben von erwartet stdin.
Mit dem < /dev/nullSie zwingen PHP zum Nachdenken, gibt es keine weiteren Eingaben.

Edit 2 :

Wenn Sie das nicht (weiter) eingeben möchten, < /dev/nullkönnen Sie einen Alias ​​für php2oder etwas erstellen :

alias php2="php < /dev/null` 

Sie können dies dauerhaft machen, wenn Sie es in Ihrem hinzufügen ~/.bashrc.

Jetzt können Sie tun:

php2 -r 'for ($i=0; $i<300; $i++) { print "$i\n";}' | less 

Sie könnten sich einen Alias ​​geben php, aber dann haben Sie nie die Möglichkeit, etwas hineinzuleiten php.
Sie können es natürlich auf p(für weniger Tippen) verkürzen .


Ursprüngliche Antwort:

Der Fehler ist auch in CentOS 6.5 enthalten.

Ein neu installiertes CentOS 6.5 hat es auch (in einer VM). A ... | cat | lessfunktioniert nicht.
A ... > a && cat a | lessfunktioniert. Stelle dir das vor.

Cursortasten funktionieren auch nicht php --help | less. Sie arbeiten in python --help | less. Es muss also etwas in der ausführbaren PHP-Datei sein . Ich denke, das ist ein seit langem bestehender Fehler in PHP.

Ich habe hier einen Hinweis auf diesen Fehler gefunden .

Bis es behoben ist, müssen Sie eine Weiterleitung durchführen:

php -r 'for ($i=0; $i<300; $i++) { print "$i\n";}' > /tmp/php.txt && cat /tmp/php.txt | less 
I had already figured the `... > tmpfile && cat tmpfile | less` workaround on my own... it is a very annoying workaround, but does work. The `< /dev/null` workaround is better but is still only a workaround, but I gave you the bounty for effort. :) Eddified vor 10 Jahren 0
I personally think that while PHP may have a bug here, less *also* has a bug. Usually (i.e. with CentOS 5) when I have a long-running program, less can still be used normally _while_ php continues to produce output. Eddified vor 10 Jahren 0
Ich habe eine Edit Nr. 2 hinzugefügt. Sie können "Alias" (zB "php2") verwenden, um "den Schmerz zu lindern" :) Hatten Sie in CentOS 5 die gleiche PHP-Version (5.3.3?) Wie in CentOS 6.2? Rik vor 10 Jahren 0
Nein, ich hatte vorher eine andere PHP-Version (5.1). Eddified vor 10 Jahren 0
Ich denke, wir brauchen jemanden mit einer RPM-Installation von PHP 5.3.28+ auf CentOS 5, um dies zu testen. Oder eine PHP 5.1.x-Installation auf CentOS 6.2+. Rik vor 10 Jahren 0
Es ist definitiv ein PHP-Problem. Ich machte eine Momentaufnahme meines CentOS 6.5, entfernte PHP 5.3.3, installierte ein RPM von PHP 5.2.17 (und dessen Abhängigkeiten) und das Problem wurde gelöst **. Nach der erneuten Installation des Standardpakets von CentOS 6.5 (PHP 5.3.3) war das Problem erneut vorhanden. Dieses Problem tritt also zwischen Version 5.2.17 und 5.3.27 von PHP auf. Rik vor 10 Jahren 0
2
t0r0X

Dies ist ein komisches Verhalten, das schwer zu reproduzieren ist. Haben Sie versucht, TERM auf einfaches Xterm einzustellen

export TERM=xterm 

oder vt100?

export TERM=vt100 

Versuchen Sie, die Fenstergröße manuell festzulegen (Anzahl der Zeilen zum Blättern, normalerweise == Anzahl der Zeilen Ihres Fensters / Ihrer Konsole):

...| less --window=80 

oder Versuche

... |less --raw-control-chars 

oder

... |less --RAW-CONTROL-CHARS 

PS: Ach ja, CentOS 6.2 wurde im Juni 2012 veröffentlicht. Haben Sie über ein Upgrade auf eine neuere Version nachgedacht? Die aktuelle CentOS-Version ist 6,5 ...

Keiner dieser Vorschläge hat funktioniert. Ich habe keine Kontrolle über die CentOS-Version. Eddified vor 10 Jahren 0
Verhält es sich besser, wenn Sie es durch ein anderes Programm leiten? ZB `... | Katze | weniger " t0r0X vor 10 Jahren 0
"... | Katze | weniger hilft nicht. Eddified vor 10 Jahren 0