在我的 FreeBSD 13.2 系统上,该zless
实用程序无法查看使用gzip
或压缩的文本文件compress
,警告它们可能是二进制文件,然后如果我说我想查看内容则显示垃圾。奇怪的是,使用zmore
orgunzip -c
似乎有效。
$ zless znapzend.log.1.gz
"znapzend.log.1.gz" may be a binary file. See it anyway?
(肯定的回答将二进制数据发送到终端。)
$ 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
这是什么原因?
简而言之:这是由于
less
在“安全”模式下运行时内部管道命令被禁用,即LESSOPEN
无法以|
ifLESSSECURE
is启动1
。看了一会儿之后,我查看了
zless
和zmore
可执行文件本身。在 FreeBSD 上,两者都是 shell 脚本,但是虽然
zmore
是一个更传统的包装器gzip
(用于解压)和less
(用于查看解压的文档),但zless
它是一个更短的 shell 脚本,调用less
环境变量集LESSOPEN
来调用脚本/usr/bin/lesspipe.sh
:然后脚本
lesspipe.sh
包含一个case
语句,该语句根据输入文件的文件名后缀调用正确的解压缩实用程序,但这在这里并不重要。重点是在LESSOPEN
环境变量中使用了内部管道命令。当环境变量
LESSSECURE
设置为时1
,less
以“安全”模式运行。在这种情况下,实用程序会忽略|
(pipe) 命令。这个难题的最后一部分是记住我实际上是
LESSSECURE=1
在我的 shell 的初始化文件中设置的。