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