“cmp -s file1 file2”不会产生任何输出

“cmp -s file1 file2”不会产生任何输出
$ cmp -s file1 file2

对于以下情况,上述命令不会返回任何内容:

  • 情况1:两个文件(file1和file2)不同;
  • 情况 2:两个文件(file1 和 file2)相同。

我尝试了以上所有情况,但我的unix系统不敏感。

答案1

-s是为了沉默的,它是告诉cmp不要输出任何内容,而只是在退出状态中反映文件是否相同,以便可以在ifshell 语句中使用:

if cmp -s file1 file2; then
  echo same
else
  echo differ or error
fi

或者:

cmp -s file1 file2 && rm file2

如果你想让它输出一些东西,删除-s.然后,cmp当文件不同时会输出一条消息,说明它们开始不同的位置。


¹ 除了一些在文件无法打开时显示错误消息的实现,而不是在文件不同时显示错误消息。

答案2

我对你的案例 1 有疑问。如果 cmp 没有返回任何内容,则文件可能相同。尝试diff file1 file确认sum file1 file2。差异是否可能在于不可打印的字符?

相关内容