我有以下自制公式L
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
下載的檔案取決于用戶在安裝前使用的作業系統。我想自動找到下載的檔案(無論名稱是什么),因此我嘗試使用正則運算式作為bin.install "software " * 帶有星號來查找下載的檔案并將其安裝為軟體
但是,我收到一條錯誤訊息,指出軟體* 找不到
請問我將如何糾正這個問題?
uj5u.com熱心網友回復:
一些建議(但請參閱下面的警告)
根據Homebrew bin.install 檔案, 的目的bin.install是在地窖中的公式位置重命名檔案,并且密鑰似乎不接受 glob 或正則運算式。但是,由于除了 Homebrew 公式 DSL 之外,您還可以使用 Ruby 的全部功能,您可以考慮執行以下操作:
def install
binfile_with_extension =
File.basename(Dir.glob "#{prefix}/bin/software*")
bin.install binfile_with_extension => "software"
end
這當然假設只有一個software-*可執行檔案。如果不止一個,那么您可能需要做一些事情來回傳 glob 的值(應該是一個陣列),以便為您的架構選擇正確的一個。
或者,您可能只是想對檔案進行符號鏈接,而不是重命名檔案本身,這樣您就不會更改應用程式可能期望的內容。檔案說您可以完全訪問FileUtils和 DSL 的bin.install_symlink方法,因此您可以考慮使用它們的某種組合。例如,要在地窖中為您的架構命名檔案創建硬鏈接,然后使用相對符號鏈接將其符號鏈接到正確的 bin 目錄中,以下應該有效:
def install
file = Dir.glob("#{prefix}/bin/software*").first
FileUtils.ln file, "#{prefix}/bin/software"
bin.install_symlink bin/"software"
end
可能有更好的 Homebrew-native 選項來重命名與鏈接到的檔案不同的符號鏈接,但我找不到。但這并不意味著不存在。
此外,首先是否需要硬鏈接或符號鏈接取決于應用程式。一些應用程式關心呼叫它們的名稱(以busybox為例),而其他應用程式則不關心。YMMV。
注意事項
我目前不是 Homebrew 開發人員,因此可能有其他或更好的方法可以做到這一點。盡管如此,Ruby glob 和 Hombrew DSL 特性的組合應該可以讓您到達您想去的地方。
請注意,我自己沒有對此進行測驗,因此如果不進行調整,上述建議可能會或可能不會起作用。我提供它只是作為一個開始的地方,因為我不認為bin.install它打算自己做你想做的事。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/407157.html
標籤:
上一篇:鐘形曲線法重構
