【问题标题】:Strange diff behaviour奇怪的差异行为
【发布时间】:2013-12-12 22:01:07
【问题描述】:

我有一个名为 this.txt 的文件,其中包含以下内容:

a
b
c
d

我使用生成的:ls /home > this.txt

然后我创建一个名为 that.txt 的文件,其中包含以下内容:

a
c
d
f

我使用生成的:ssh -p 1111 root@176.178.1.8 'ls /home' > that.txt

当我使用diff this.txt that.txt 比较两者时,我得到了正常结果。

然后我使用expect 脚本获取文件that2.txt 以避免输入包含此内容的ssh 连接密码

a
c
d
f

使用cat,我比较(视觉上)两个文件,它们是相同的,但是当我使用diff this.txt that.txt 时,我得到的结果毫无意义(它说this.txt 中没有任何内容在that2.txt 中)。

另外,如果我使用diff that.txt that2.txt,我会得到毫无意义的结果。

也许是因为我使用了两个不同的解释器(因为我使用了 expect 和 bash)并且文件的编码不同?有什么想法吗?

PD:希望我能解释一下自己。我不会说英语,这是我的第一个问题。

【问题讨论】:

  • 你能做cat -vte that2.txt并显示它的输出吗?
  • 欢迎来到 SO。我对您的标记进行了某种“规范化”,如果您查看我的更改以供将来参考,这可能是个好主意 - 只是因为统一性使其更易于阅读。
  • 感谢@ChristopherCreutzig 的格式化。下次我会这样做。我爱这个社区!

标签: linux ssh diff expect


【解决方案1】:

我假设您的文件在行尾带有空格或不同的行尾标记,可能两者都有。请比较od -c that.txtod -c that2.txt 的输出。此外,检查文件大小可能值得。

哦,我应该补充一点,您不需要将密码放入expect 脚本中。 ssh 可以与公钥对一起使用,这是一种更安全的替代方案,而且设置起来并不难。检查man ssh-keygen 以了解开始。

【讨论】:

  • CRLF 行终止符,也许吧?
  • 谢谢! od 命令成功了。我意识到 that.txt 中的每一行都以 \n 结尾,而 that2.txt 中的每一行都以 \r\n 结尾。所以我使用了tr -d '\r' > that2.txt,现在diff this.txt that.txtdiff this.txt that2.txt 显示相同的结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-18
  • 1970-01-01
相关资源
最近更新 更多