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

gre*_*man 45 shell io-redirection

通常你会写:

diff file1 file2
Run Code Online (Sandbox Code Playgroud)

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

diff file1 <(cat file2 | sort)
Run Code Online (Sandbox Code Playgroud)

好的,当我在 shell 提示符下手动输入时,这项工作有效,但是当我在 shell 脚本中放入完全相同的行,然后运行该脚本时,出现错误。

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

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

Cal*_*leb 51

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

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

cat file2 | sort | diff file1 -
Run Code Online (Sandbox Code Playgroud)

或者避免无用的使用 cat

sort < file2 | diff file1 -
Run Code Online (Sandbox Code Playgroud)