es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Fórmula Homebrew – renombrando archivos durante la instalación.

Tengo la siguiente fórmula Homebrew:

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

La parte problemática es:

def install
  bin.install "software*" => "software"
end

Los archivos que se descargan dependen del sistema operativo del usuario antes de la instalación. Quiero encontrar automáticamente el archivo descargado (cualquiera que sea su nombre), por eso estoy intentando usar una expresión regular como bin.install "software*" con un asterisco para encontrar el archivo descargado y luego instalarlo como software.

Sin embargo, recibo un error que indica que no se puede encontrar “software*”.

Por favor, ¿cómo puedo solucionar este problema?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para solucionar este problema, puedes utilizar la clase Dir para encontrar el archivo descargado y pasarlo al método bin.install. Así es como puedes modificar el método install:

    def install
      downloaded_file = Dir["*.gz"].first # o cualquier otra extensión de archivo
      if downloaded_file.nil?
        STDERR.puts "ERROR: No se pudo encontrar el archivo descargado"
        exit 1
      end
    
      bin.install downloaded_file => "software"
    end
    

    Este código utiliza Dir.glob para encontrar el primer archivo con extensión .gz (puedes reemplazarlo con la extensión de archivo real). Si no se encuentra ningún archivo, imprime un mensaje de error y sale con un código de estado no cero. Luego utiliza bin.install para instalar el archivo descargado como “software”.

    Ten en cuenta que esto asume que el archivo descargado está en el mismo directorio donde ejecutas brew install. Si está en un directorio diferente, deberás modificar el código para apuntar a la ruta correcta.

Comments are closed.