PHP CLI a less

PHP CLI a less
« kdy: 22. 04. 2010, 14:51:37 »
Mám zase jeden bizarní problém. Vyrábím PHP program a občas si nějakou funkci testuju na příkazové řádce. Pokud je výstup z PHP delší, pustím ho pípou do less, ale to se chová podivně. Všechny příkazy (scroll down, quit, go to beginning, atd.), místo aby se hned vykonaly, se vypíší na konec stavového řádku a provedou se až po stisknutí Enter. Pozoruhodné je, že tohle chování způsobuje pouze výstup z PHP, takže to nevypadá čistě na problém less.

Včera jsem si hrála s různým nastavením proměnných LESS a LESSOPEN a podařilo se mi zblbnout i more a most, ale most se po novém nalogování vzpamatoval. Ty proměnné jsou nastavené takto:
LESS=-iM
LESSOPEN=|/usr/bin/lesspipe.sh %s

Doma mám nastavené jenom LESSOPEN a blbne mi to tam taky. Tam to nejdřív fungovalo, ale když jsem v běžícím less zapnula nějaký přepínač (např. -i nebo -M), tak to začalo blbnout taky, a už se to nevzpamatovalo.

Když se přihlásím přes ssh na náš druhý počítač, chová se less řádně, i když si za běhu hraju s přepínači, takže to vypadá, že svou roli v tom hraje ještě gnome-terminal.

V diskusní skupině k PHP jsem našla dva roky starý dotaz (http://www.mail-archive.com/php-general@lists.php.net/msg230132.html), ale tazatele tam odbyli, že je to problém lessu.

Pozoroval někdo někdy něco takého? Pokud by se chtěl někdo na to podívat, tady je jednoduchý skriptík, který vypíše obsah adresáře:
Kód: [Vybrat]
<?php

$dh  
opendir('.');
while (
false !== ($filename readdir($dh))) {
  echo 
$filename;
  echo 
"\n";
}
?>



Re: PHP CLI a less
« Odpověď #1 kdy: 22. 04. 2010, 15:54:53 »
Mám zase jeden bizarní problém. Vyrábím PHP program a občas si nějakou funkci testuju na příkazové řádce. Pokud je výstup z PHP delší, pustím ho pípou do less, ale to se chová podivně. Všechny příkazy (scroll down, quit, go to beginning, atd.), místo aby se hned vykonaly, se vypíší na konec stavového řádku a provedou se až po stisknutí Enter. Pozoruhodné je, že tohle chování způsobuje pouze výstup z PHP, takže to nevypadá čistě na problém less.
Nevím jestli je to zrovna tento případ, ale není náhodou možné, že by PHP vypisovalo na standardní chybový výstup, zatímco na standardním výstupu nic nebylo? To by se totiž přesně takhle chovalo. Je docela možné, že se dá v php.ini zkonfigurovat, zda to má vypisovat na standardní chybový výstup, nebo standardní výstup.

Pro ověření, zda je toto tvoje příčina, zkus přesměrovat výstup do /dev/null. Jestli to bude stále vypisovat, znamená to, že php vypisuje na chybový výstup. Konstrukce php neco.php 2| less bohužel nefunguje, takže nezbývá buď přesměrovat do souboru pomocí 2>, nebo přemluvit php, aby vystupovalo na stdout.

Re: PHP CLI a less
« Odpověď #2 kdy: 22. 04. 2010, 16:28:07 »
Tak tímhle to nebylo, když pošlu výstup do /dev/null, tak se mi skutečně nic neukáže. Navíc v php.ini jsem nenašla nic, co by mělo přesměrovat výstup na stderr, jsou tam jenom opačné možnosti: posílat chyby na stdout nebo nevypisovat vůbec. A ani změna tohohle nastavení nijak nepomohla.

janus

Re: PHP CLI a less
« Odpověď #3 kdy: 22. 04. 2010, 16:49:39 »
Ahoj,

co vypíše

echo $TERM

případně ještě zkus chování terminálu po nastavení na něco starého a vyzkoušeného(tm) tj.

export TERM=vt100
nebo
export TERM=xterm

Gnome terminal tu teď nemám po ruce, jsem ve win a mam putty na ubuntu 8.04.03 LTS. pokud nastavím TERM=xterm chová se to korektně (php skript.php | less).

janus

Re: PHP CLI a less
« Odpověď #4 kdy: 22. 04. 2010, 16:59:44 »
TERM je xterm. Zapomněla jsem napsat, že nastavení vt100 už jsem taky zkoušela a nepomohlo to.