如何使用 Shell 比较两个远程文件之间的文件内容差异?

How to compare the filecontent difference between two remote files using Shell?

如何在不使用 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 中不可用。

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"