Editar:
Encontrou a solução: Você precisa fazer um < /dev/null após o comando PHP:
php -r 'for ($i=0; $i<300; $i++) { print "$i\n";}' < /dev/null | less
Aparentemente, o PHP se comporta de maneira diferente porque ainda espera a entrada de stdin .
Com o < /dev/null você força o PHP a pensar que não há mais entrada.
Editar 2 :
Se você não quiser (manter) digitando o < /dev/null , você pode criar um alias para php2 ou algo assim:
alias php2="php < /dev/null'
Você pode torná-lo permanente se adicioná-lo ao seu ~/.bashrc .
Agora você pode fazer:
php2 -r 'for ($i=0; $i<300; $i++) { print "$i\n";}' | less
Você pode alias php para si mesmo, mas nunca terá a capacidade de canalizar algo para php .
Você poderia, naturalmente, encurtá-lo para p (para menos digitação).
Resposta original:
O bug também está presente no CentOS 6.5.
Um novo CentOS 6.5 instalado também (em uma VM). Um ... | cat | less não funciona.
Um ... > a && cat a | less funciona. Vá a figura.
As teclas do cursor também não funcionam em php --help | less . Eles funcionam em python --help | less . Portanto, deve ser algo no executável do PHP . Eu acho que este é um bug de longa data no PHP.
Encontrei uma referência a esse bug aqui .
Até que seja corrigido, você precisa redirecionar:
php -r 'for ($i=0; $i<300; $i++) { print "$i\n";}' > /tmp/php.txt && cat /tmp/php.txt | less