如何链接多个 LESSOPEN 脚本?

如何链接多个 LESSOPEN 脚本?

如今,Linux 发行版有一个默认LESSOPEN设置/usr/bin/lesspipe,允许用户轻松检查压缩文件或 PDF 文件等。

现在我想看看是否可以为 less 添加语法高亮。这很容易完成来源突出显示。我用过LESSOPEN="| /usr/bin/source-highlight -i %s -q -f esc"并且效果很好。

但现在问题变成了:如何获得 lesspipe 和 source-highlight 的行为?简单地一个接一个地附加是行不通的:

$ export LESSOPEN="| /usr/bin/lesspipe %s | /usr/bin/source-highlight -i %s -q -f esc"
$ less foo
Invalid LESSOPEN variable

这也没有意义,所以这并不奇怪。

是否可以在不编写复杂脚本的情况下进行设置?最好的情况是进行链接,即为压缩文件提供语法突出显示。

答案1

初始管道之后的变量中的命令LESSOPEN由环境变量指示的 shell 执行SHELL,并且必须在其标准输出上生成所需的内容。

您可以将 的输出lesspipe作为输入传递给另一个从标准输入读取并写入标准输出的命令。但是,为了source-highlight从标准输入中读取内容,需要告诉它要突出显示哪种语言,因此source-highlight这种方式不起作用。

lesspipe无法识别文件格式时,它不会打印任何内容,这较少被解释为读取原始文件的指示。如果你有ifneJoey Hess 的 moreutils,您可以用它来检测这种情况并尝试source-highlight替代。您需要将原始文件名保存在变量中,以便可以使用它两次。

LESSOPEN='|file=%s; /usr/bin/lesspipe "$file" | /usr/bin/ifne -n /usr/bin/source-highlight -i "$file" -o STDOUT 2>/dev/null'

请注意,您需要在启动后包含-r或,或键入或,以便更少地渲染颜色。-R$LESS-r-Rless

相关内容