“命令 | 更少”与“更少 <(命令)”

Dre*_*wen 6 less bash pipe file-descriptors command-substitution

查看大量命令输出的常见“习惯用法”是通过管道将其less通过command | less. 但是,也有可能(可能仅在bash,尚未在其他 shell 中测试过)使用该less <(command)语法,但less往往会抱怨/dev/fd/63 is not a regular file. 在探查之后/proc/*/fd,我看到在这两种情况下,它都是从管道中读取的。唯一的区别是在第一种情况下,它stdin被重定向。在第二种情况下,它/dev/fd/63作为文件名获取。less读取时是否以某种方式“忽略”常规文件检查stdin?另外,/dev/fd/63即使内容是文本,它如何确定这不是常规文件?

cha*_*aos 3

less通常拒绝打开非常规文件,例如管道或二进制文件。您可以使用-f运算符强制less打开非常规文件:

less -f <(command)
Run Code Online (Sandbox Code Playgroud)

另一种方法是使用进程替换

less < <(command)
Run Code Online (Sandbox Code Playgroud)

这会导致创建的管道充当<()的标准输入 ( STDIN) less