我有以下自制formulaL
class Software < Formula
desc "Software"
homepage "https://blabla"
version "1.6.0"
if OS.mac? && Hardware::CPU.intel?
url "https://blabla/releases/download/v1.6.0/software-darwin-10.12-amd64"
sha256 "ce02a97fb95aca9bba44413d4158f5f2c182f5eb2823bedf1400f556bb9b"
end
if OS.mac? && Hardware::CPU.arm?
url "https://blabla/releases/download/v1.6.0/software-darwin-10.12-arm64"
sha256 "1c69849ba82c10d15706d110ae63bd97c387da2a8cf925653e1bb5c6fc"
end
if OS.linux? && Hardware::CPU.intel?
url "https://blabla/releases/download/v1.6.0/software-linux-amd64"
sha256 "9b7245823a60c85e027929b776753848d4fbdaaa333a49ae171684893"
end
def install
bin.install "software*" => "software"
end
test do
system "#{bin}/software --version"
end
end
有问题的部分是:
def install
bin.install "software*" => "software"
end
下载的文件取决于安装前用户在哪个操作系统上。我想要自动找到下载的文件(不管文件的名称是什么),因此我为什么要使用regex作为bin.install“软件”*与星号一起查找下载的文件并将其安装为软件
但是,我发现了一个错误,说明软件*找不到
请问我如何纠正这个问题?
发布于 2022-01-06 08:51:23
一些建议(但见下面的注意事项)
根据自制bin.install文档,bin.install
的目的是重命名公式所在的位置中的文件,而密钥似乎既不接受glob,也不接受正则表达式。但是,由于除了Homebrew之外,您还可以使用Ruby的全部功能,因此可以考虑执行以下操作:
def install
binfile_with_extension =
File.basename(Dir.glob "#{prefix}/bin/software*")
bin.install binfile_with_extension => "software"
end
当然,这假设只有一个software-*
可执行文件。如果有多个,那么您可能需要做一些事情来返回glob的值(应该是Array)来为您的体系结构选择正确的值。
或者,与其重命名文件本身,您可能只是想要将其符号链接,这样您就不会更改应用程序可能期望的内容。文档中说,您可以完全访问FileUtils和DSL的符号链接方法,因此可以考虑使用这些方法的某些组合。例如,要为您的体系结构命名的文件在地窖中创建一个硬链接,然后使用相对符号链接将它链接到正确的bin目录中,下面的内容应该可以工作:
def install
file = Dir.glob("#{prefix}/bin/software*").first
FileUtils.ln file, "#{prefix}/bin/software"
bin.install_symlink bin/"software"
end
可能有更好的本地选项来重命名符号链接,不同于它们链接到的文件,但是我找不到一个。但这并不意味着一个人不存在。
此外,硬链接或符号连接是否必要首先取决于应用程序。一些应用程序关心它们被调用的名称(例如busybox ),而另一些应用程序则不关心。
注意事项
我目前不是一个家用开发人员,所以可能有其他或更好的方法来做到这一点。尽管如此,Ruby globs和Hombrew特性的结合应该可以使您达到您想要的目的。
请注意,我还没有亲自测试过这一点,所以上面的建议可能不需要调整,也可能不起作用。我提供它只是作为一个起点,因为我不认为bin.install
的目的是自己做你想做的事情。
https://stackoverflow.com/questions/70593365
复制相似问题