如何区分文件和命令的输出?

如何区分文件和命令的输出?

通常你会写:

diff file1 file2

但我想比较一个文件和命令的输出(这里我使命令变得简单):

diff file1 <(cat file2 | sort)

好的,当我在 shell 提示符下手动输入此内容时,此操作有效,但是当我在 shell 脚本中放入完全相同的行,然后运行该脚本时,我收到错误。

那么,问题是——如何正确地做到这一点?

当然,我想避免将输出写入临时文件。

答案1

我怀疑你的脚本和你的 shell 是不同的。也许您#!/bin/sh在脚本的顶部作为解释器,但您正在使用bash作为您的个人 shell。您可以通过运行来了解您在终端中运行的 shell echo $SHELL

执行此操作的一种更简单的方法(应该适用于大多数 shell)是使用管道重定向而不是您提供的文件读取运算符。符号“-”是读取 STDIN 的标准命名法,经常可以用作参数列表中文件名的替换:

cat file2 | sort | diff file1 -

或者为了避免对猫的无用利用:

sort < file2 | diff file1 -

答案2

标准输入的范围是脚本本身,因此只需将代码放入块中,如下所示:

{
  diff file1 <(sort file2)
}

这样,STDIN 的范围就在块内。

我已经尝试过并且有效。

相关内容