【问题标题】:How to compare the filecontent difference between two remote files using Shell?如何使用Shell比较两个远程文件之间的文件内容差异?
【发布时间】:2021-05-22 18:57:15
【问题描述】:

如何在不使用 Bash 的情况下使用一行 Shell 命令比较两个远程文件之间的文件内容差异?

尝试运行文件attempt.sh,其内容为:

#! /bin/sh
diff $(curl "https://raw.githubusercontent.com/dockerfile/ubuntu/master/README.md") $(curl "https://raw.githubusercontent.com/dockerfile/ubuntu/master/Dockerfile")

请注意,如 here 所示,来自 bash 的 <() 进程替换在 shell 中不可用。

【问题讨论】:

标签: curl sh diff


【解决方案1】:

diff 对文件进行操作,而不是对传入参数的内容进行操作。命令替换 ($(...)) 将命令替换为其内容,这不是您需要的工具。

你真正需要的是所谓的进程替换(<(...)),它用包含(实际上传达)命令结果的伪文件(实际上是管道)替换命令,该命令在子进程。

diff <(curl "https://raw.githubusercontent.com/dockerfile/ubuntu/master/README.md") \
     <(curl "https://raw.githubusercontent.com/dockerfile/ubuntu/master/Dockerfile")

不幸的是,正如您在注释中添加的那样,这是 POSIX shell (/bin/sh) 不知道的 bash 扩展。据我所知,/bin/sh 没有解决方案,您必须将两个 curl 输出中的至少一个保存在文件中:

$ tmp=$(mktemp)
$ curl -o "$tmp" "https://raw.githubusercontent.com/dockerfile/ubuntu/master/README.md"
$ curl "https://raw.githubusercontent.com/dockerfile/ubuntu/master/Dockerfile" \
  | diff "$tmp" -
$ rm -f "$tmp"

【讨论】:

    猜你喜欢
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    • 2018-09-14
    • 1970-01-01
    • 2020-12-28
    • 2016-03-28
    • 1970-01-01
    • 2021-09-28
    相关资源
    最近更新 更多