为什么 LESSOPEN 导致我的命令挂起?

为什么 LESSOPEN 导致我的命令挂起?

我试图less使用LESSOPEN环境变量读取某些文件的过滤版本,但无论我的预处理器多么简单,该命令都会挂起,直到我SIGINT通过 Ctrl+C 发送它:

LESSOPEN='||cat' less foo bar

我在这里做错了什么? (请注意,我不能仅将输入作为管道传递,因为我在单独的缓冲区中打开多个文件。)

答案1

您忘记了%s,没有它就cat无法获取文件名,只是等待来自标准输入的输入:

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

联机帮助页说:

要设置输入预处理器,请将 LESSOPEN 环境变量设置为将调用输入预处理器的命令行。该命令行应包含一次字符串“%s”,当调用输入预处理器命令时,该字符串将被文件名替换。

相关内容