我正在处理一系列自动化测试,在运行KSH的2个Unix虚拟机上执行。这些虚拟机是独立的,并且它们几乎具有相同的.profile文件。我想通过启动以下命令来研究它们之间的差异:
tkdiff /usr/system/.profile system@{external_IP}:/usr/system/.profile
我在第一台虚拟机上尝试了一下,但没有成功。
我猜直接访问隐藏文件是不可能的。有没有解决方案或替代方法呢?
我正在处理一系列自动化测试,在运行KSH的2个Unix虚拟机上执行。这些虚拟机是独立的,并且它们几乎具有相同的.profile文件。我想通过启动以下命令来研究它们之间的差异:
tkdiff /usr/system/.profile system@{external_IP}:/usr/system/.profile
我在第一台虚拟机上尝试了一下,但没有成功。
我猜直接访问隐藏文件是不可能的。有没有解决方案或替代方法呢?
sum
、md5sum
或sha256sum
计算文件的哈希值。如果哈希值相同,则有相同文件的概率极高!您甚至可以通过使用wc
检查文件中的字符数、行数和单词数来增加这种概率。$ file="/usr/system/.profile"
$ md5sum "$file" && wc "$file"
$ ssh user@host "md5sum '$file' && wc '$file'"
2. 运行简单的差异比较
使用经典的命令行工具运行简单的差异比较。它们遵循POSIX标准,使用-
作为/dev/stdin
。这样你就可以执行:
$ ssh user@host "cat -- '$file'" | diff "$file" -
tkdiff
或新版本的 svn/git 可能会有些棘手,因为 tkdiff 中存在错误。如果其中一个文件可能在版本控制下,或者你处于一个受版本控制的目录中,它将快速抛出以下形式的错误:svn [XXXX] file .... is not a working copy
或 file xxxx is not part of a revision control system
。坚持使用 diff!您可以通过远程ssh比较,使用cat命令行运行远程显示,如下:
tkdiff <(ssh system@{external_IP}1 'cat /usr/system/.profile') <(ssh system@{external_IP}2 'cat /usr/system/.profile')
tkdiff /usr/system/.profile <(ssh system@{external_IP} 'cat /usr/system/.profile')
你是否尝试过使用简单的diff命令行(使用-b -B选项来删除空白行和空格比较):
diff -b -B /usr/system/.profile <(ssh system@{external_IP} 'cat /usr/system/.profile')
'(' unexpected
)。当尝试使用diff
解决方案时,同样的事件发生。 - 0009laH
system@{external_IP}:/usr/system/.profile
并不是一个真正的文件。尝试使用 进程替换 https://tldp.org/LDP/abs/html/process-sub.html,像这样tkdiff /usr/system/.profile <(ssh system@{external_IP} cat /usr/system/.profile)
。虽然如果tkdiff
需要一个可寻址的文件,那么这种方法可能行不通。 - Mark Setchellbash
中才有可能工作。 - Mark Setchell