查看大量命令输出的常见“习惯用法”是将其通过管道传输到less
, via 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
即使内容是文本,它如何确定这不是常规文件?
答案1
less
通常拒绝打开非常规文件,例如管道或二进制文件。您可以使用-f
运算符强制less
打开非常规文件:
less -f <(command)
另一种方法是使用流程替代:
less < <(command)
这会导致创建的管道<()
充当 的标准输入 ( STDIN
) less
。
答案2
less
往往会抱怨/dev/fd/63
不是一个普通的文件
至少在 GNU 下,解决这个问题的方法是使用以下选项-f
:
less -f <(command)
正常情况下,less
不会打开非常规文件(显然stdin除外)。这是为了保护您。 -f
强制打开非常规文件。