我在 diff
man-page 中找到了以下退出值:
0 No differences were found.
1 Differences were found.
>1 An error occurred.
不同的错误会产生大于 1 的不同退出值吗?
diff 命令。我的(GNU diffutils 3.0)显示:
一个退出状态为 0 表示没有发现差异, 1 表示发现了一些差异, 2 表示出现问题。通常,不同的二进制文件被视为问题,但可以通过使用 -a 或 --text 选项或 -q 或 --brief 选项来更改此设置。
echo^V^[c
(echo-[control-v]-[escape]-c
) 或 stty sane
。 - Frédéric Hamididiff -r
时)。 - sid_comdiff
和Perl的IPC::System::Simple::system
,它允许我指定一系列被视为可接受的退出值。 - sid_com根据您使用的diff版本,可能会存在不同的错误代码,也可能没有错误代码。如果我没记错的话,标准的BSD diff命令返回0、1或2的退出代码。
然而,手册并未列出diff可能执行的所有操作,但您可以使用它来进行diff命令的文档说明。在shell脚本中,我想知道文件是否匹配(退出码=0)或不匹配(退出码=1),但是在我的shell脚本中,我还想知道diff命令本身是否工作正常。
diff $file1 file2 > /dev/null 2>&1
error=$?
if [ $error -eq 0 ]
then
echo "$file1 and $file2 are the same file"
elif [ $error -eq 1 ]
then
echo "$file1 and $file2 differ"
else
echo "There was something wrong with the diff command"
fi
想象一下,如果我被告知2代表diff命令失败,但是较新版本的diff命令区分了您无法读取的文件(退出= 2)和丢失的文件(退出= 3)。现在,请想象一下,在较早版本的diff命令中我执行了以下操作,但是$file2
不存在:
diff $file1 file2 > /dev/null 2>&1
error=$?
if [ $error -eq 2 ]
then
echo "There was something wrong with the diff command"
elif [ $error -eq 1 ]
then
echo "$file1 and $file2 differ"
else
echo "$file1 and $file2 are the same file"
fi
在上面的代码中,我检查了错误代码2和1,但没有检查3。因此,我假设文件匹配而不是检测缺失的文件。if [ $? eq 0 ]
еҗҺ $?
зҡ„еҖјдјҡиў«жӣҙж–°пјҢеӣ жӯӨ elif
зҡ„иҜ„дј°дёҺ diff иҫ“еҮәж— е…ігҖӮ - chusdiff
版本,可能会有不同的错误代码。POSIX diff
在文件相同时退出状态码为0,在文件不同时为1,在其他情况下为>1。因此,您不能假设为2,但0和1是安全的。 - David Ehrmanndiff
命令的 BSD 版本中,diff manpage 将错误代码列为 0、1 或 2。现在 Mac 使用来自 GNU 的 diffutils,因此 manpage 中的错误代码现在为 0、1 和 >1。所有 Unix diff
命令都表示 0
表示文件匹配,而 1
表示发现了差异。之后,文档有所不同。 - David W.case
而不是if+elif...
。然后您只需要评估$?
一次。 - JMBdiff
返回了 127。查找并在 tldp.org 的 "Exit Codes With Special Meanings" 中找到了它。
我使用了一个不正确的路径来调用diff。 :)127 “command not found” - illegal_command - 可能是$PATH的问题或者拼写错误。
diff
返回127,而是因为您的shell无法执行diff
而返回了127。 - Colin 't HartmacOS使用类似于GNU diff的返回代码,但明确将2定义为错误情况的返回代码:
退出状态码为0表示没有发现差异,1表示发现了一些差异,2表示出现问题。
-- 来自于info diff
,macOS 12.6.3下的"调用diff"部分
info diff
获取完整手册。在那里,Invoking diff
下面写着:“退出状态为 0 表示没有发现差异,1 表示发现了一些差异,2 表示有问题。” - Colin 't Hart