Linux 相当于 Windows cmd 命令

Linux 相当于 Windows cmd 命令

我正在迁移到 Linux,并且需要转换以下 Windowscmd命令:

fc file1.txt file2.txt | find /i "no se han encontrado diferencias" > nul && set equal=yes

我认为fc可以用diffor代替comm,但我不知道如何做这部分,也许是一个声明......findgrep&&if

答案1

猜测一下这些 Windows 命令的作用,我想说 POSIXsh脚本中的等效命令是:

equal=no
cmp -s file1 file2 && equal=yes

如果两个文件可以读取并且具有相同的内容(字节到字节),则将equal变量设置为。yes

作为 的替代方案cmp -s,在某些系统(包括基于 Linux 的系统)上,您可以使用diff -q. diff -qq为了安静的),与大多数cmp -ss对于沉默的)如果无法读取任何文件,将报告错误消息。虽然diff和的 GNU 实现cmp都首先检查这两个文件是否是同一文件的路径(包括另一个文件的硬链接或符号链接)或者大小不同,以节省读取它们的麻烦,但busybox的实现cmp并不而busybox diff确实如此。因此,在那些使用 的系统上,出于性能原因,busybox您可能更喜欢。diff -q

答案2

您的 Windows 命令似乎会使用该命令比较两个文件fc,并在输出中搜索“无差异”消息;如果我们看到该消息,则将变量设置equalyes

unix命令cmp可以用来比较文件,如果匹配则返回零输出,我们可以直接测试这一点,因此不需要“搜索输出”功能。

[[ -z "$(cmp file1 file2 2>&1)" ]] && equal=yes

答案3

bashshell 中,&&运算符是用于进程控制的逻辑与,如果第一个进程未因错误退出,则允许运行第二个进程。双管道 ( ||) 的作用类似,但它是一个 OR 语句,并且如果先前的命令不成功,则会运行。

sample_file因此,给出一个名为以下内​​容的文件:

aaa
bbb
123
ccc
ddd

命令

grep ccc sample_file >/dev/null && echo found || echo not found

将回显“找到”和这个 -

grep cow sample_file >/dev/null && echo found || echo not found

会回显“未找到”

只需将 echo 语句替换为您的变量赋值即可。

相关内容