我cmp
在 Ubuntu 上使用该命令,我想澄清一下它的返回值。
手册 ( $ man cmp
) 没有说明返回值,但建议查看 GNU 文档。确实如此,$ info cmp
说:
退出状态 0 表示没有发现差异,1 表示发现了一些差异,2 表示有问题。
(可以在这里在线找到,同一句话)。
我了解 0 和 1 的值,但在什么情况下会cmp
返回值 2?这还不清楚。
上下文:我正在使用该命令检查两个文件是否相同,我想知道如果cmp
返回 2 我应该做什么。
版本:
$ cmp --version
cmp (GNU diffutils) 3.7
当存在阻止它进行比较的错误时, GNU
cmp
以退出状态 2 终止,例如,如果一个或两个文件无法找到或无法读取:POSIX 标准规范规定
cmp
,该实用程序应在“错误”时以“大于 1”的退出状态终止。退出状态 2 表示
cmp
无法执行比较,例如因为它无法读取一个或两个文件。如果其中一个文件名指向一个目录,或者文件不存在,或者您没有读取它们的权限等,就会发生这种情况。这并不详尽。
cmp
如果没有足够的内存来执行比较,也可能会失败。cmp
如果您在无效的命令行中给出它,也会以状态 2 退出;例如,未定义的选项(如-z
or--foo
)或两个以上的文件名(或 没有 文件名)。无论如何,它应该给你一个描述问题的错误消息。cmp
s 退出状态为 2,表示“不可恢复的错误,我放弃”。它涵盖cmp
了除“相同”或“不同”之外的所有退出状态。在“做好一件事”的 Unix 传统中,
cmp
比较两个文件。它不是通用的诊断工具。在 Unix 的早期,让
cmp
二进制文件变小是有利的。避免“功能蠕变”导致体积小。