No meu sistema FreeBSD 13.2, o zless
utilitário não pode visualizar arquivos de texto compactados com gzip
ou compress
, avisando que podem ser arquivos binários e mostrando lixo se eu disser que quero ver o conteúdo de qualquer maneira. Estranhamente, usar zmore
ou gunzip -c
parece funcionar.
$ zless znapzend.log.1.gz
"znapzend.log.1.gz" may be a binary file. See it anyway?
(Responder afirmativamente envia dados binários para o terminal.)
$ zless --version
less 608 (POSIX regular expressions)
Copyright (C) 1984-2022 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.
Home page: https://greenwoodsoftware.com/less
$ zmore --version
less 608 (POSIX regular expressions)
Copyright (C) 1984-2022 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.
Home page: https://greenwoodsoftware.com/less
Qual é a causa disso?
Resumindo: é devido ao comando pipe interno ser desabilitado quando
less
executado no modo "seguro", ou seja,LESSOPEN
não pode iniciar com|
ifLESSSECURE
is1
.Depois de mexer nisso por um tempo, olhei para os próprios executáveis
zless
ezmore
.No FreeBSD, ambos são scripts de shell, mas embora
zmore
seja um wrapper mais tradicionalgzip
(para descompactação) eless
(para visualizar o(s) documento(s) descompactado(s)),zless
é um script de shell muito mais curto chamandoless
com a variável de ambienteLESSOPEN
definida para invocar o script/usr/bin/lesspipe.sh
:O
lesspipe.sh
script consiste em umacase
instrução que chama o utilitário de descompactação correto, dependendo do sufixo do nome do arquivo de entrada, mas isso não é importante aqui. O ponto principal é que o comando pipe interno é usado naLESSOPEN
variável de ambiente.Quando a variável de ambiente
LESSSECURE
é definida como1
,less
é executado no modo "seguro". Quando este for o caso, o utilitário ignora o|
comando (pipe).A parte final do quebra-cabeça foi lembrar que eu realmente configurei
LESSSECURE=1
os arquivos de inicialização do meu shell.