“命令 | less”与“less

“命令 | less”与“less

查看大量命令输出的常见“习惯用法”是将其通过管道传输到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强制打开非常规文件。

相关内容