首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用"zless“发出查看压缩文件的命令,但不使用"zmore”或"gunzip -c“

使用"zless“发出查看压缩文件的命令,但不使用"zmore”或"gunzip -c“
EN

Unix & Linux用户
提问于 2023-04-16 12:29:04
回答 1查看 458关注 0票数 9

在我的FreeBSD 13.2系统上,zless实用程序不能查看用gzipcompress压缩的文本文件,警告它们可能是二进制文件,如果我说无论如何都想查看内容,那么就会显示垃圾。奇怪的是,使用zmoregunzip -c似乎有效。

代码语言:javascript
复制
$ zless znapzend.log.1.gz
"znapzend.log.1.gz" may be a binary file.  See it anyway?

(应答肯定地将二进制数据发送到终端。)

代码语言:javascript
复制
$ 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
代码语言:javascript
复制
$ 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

原因是什么?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2023-04-16 12:29:04

短消息:这是因为当less以“安全”模式运行时,内部管道命令被禁用,也就是说,如果LESSOPEN1,则LESSSECURE不能以|开头。

经过一段时间的讨论之后,我查看了zlesszmore可执行文件本身。

在FreeBSD上,两者都是shell脚本,但是虽然zmore是围绕gzip (用于解压缩)和less (用于查看解压缩文档(S))的一个更传统的包装器,但zless是一个更短的shell脚本,调用less的环境变量LESSOPEN设置为调用脚本/usr/bin/lesspipe.sh

代码语言:javascript
复制
#!/bin/sh
#
# $FreeBSD$
#

export LESSOPEN="||/usr/bin/lesspipe.sh %s"
exec /usr/bin/less "$@"

然后,lesspipe.sh脚本由一个case语句组成,该语句根据输入文件的文件名后缀调用正确的解压缩实用程序,但这在这里并不重要。要点是在LESSOPEN环境变量中使用内部管道命令。

当环境变量LESSSECURE设置为1时,less以“安全”模式运行。在这种情况下,实用程序将忽略| (管道)命令。

谜题的最后一部分是记住,我实际上在shell的初始化文件中设置了LESSSECURE=1

票数 10
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/743049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档