首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >自制公式-在安装时重命名文件

自制公式-在安装时重命名文件
EN

Stack Overflow用户
提问于 2022-01-05 13:05:51
回答 1查看 132关注 0票数 1

我有以下自制formulaL

代码语言:javascript
代码运行次数:0
运行
复制
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

有问题的部分是:

代码语言:javascript
代码运行次数:0
运行
复制
    def install
      bin.install "software*" => "software"
    end

下载的文件取决于安装前用户在哪个操作系统上。我想要自动找到下载的文件(不管文件的名称是什么),因此我为什么要使用regex作为bin.install“软件”*与星号一起查找下载的文件并将其安装为软件

但是,我发现了一个错误,说明软件*找不到

请问我如何纠正这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-06 16:51:23

一些建议(但见下面的注意事项)

根据自制bin.install文档bin.install的目的是重命名公式所在的位置中的文件,而密钥似乎既不接受glob,也不接受正则表达式。但是,由于除了Homebrew之外,您还可以使用Ruby的全部功能,因此可以考虑执行以下操作:

代码语言:javascript
代码运行次数:0
运行
复制
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目录中,下面的内容应该可以工作:

代码语言:javascript
代码运行次数:0
运行
复制
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的目的是自己做你想做的事情。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70593365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档