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