通常你会写:
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 的范围就在块内。
我已经尝试过并且有效。