Por que LESSOPEN está fazendo com que meu comando trave?

Por que LESSOPEN está fazendo com que meu comando trave?

Estou tentando ler uma versão filtrada de alguns arquivos lessusando a LESSOPENvariável de ambiente, mas por mais simples que seja meu pré-processador, o comando trava até que eu o envie SIGINTvia Ctrl + C:

LESSOPEN='||cat' less foo bar

O que estou fazendo de errado aqui? (Observe que não posso simplesmente passar a entrada como um canal, pois estou abrindo vários arquivos em buffers separados.)

Responder1

Você esqueceu o %s, sem o qual catnão obteve um nome de arquivo e está simplesmente aguardando a entrada do stdin:

LESSOPEN='||cat %s' less foo bar # works
LESSOPEN='||cat' less foo bar # hangs

Opágina de manualdiz:

Para configurar um pré-processador de entrada, defina a variável de ambiente LESSOPEN como uma linha de comando que invocará seu pré-processador de entrada. Esta linha de comando deve incluir uma ocorrência da string "%s", que será substituída pelo nome do arquivo quando o comando do pré-processador de entrada for invocado.

informação relacionada