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.

Error de exec.Command en Golang en Windows debido a comillas dobles.

Tengo este comentario, que descarga un archivo simple:

var tarMode = "xf"
cmdEnsure = *exec.Command("cmd", "/C", fmt.Sprintf(`curl -L -o file.zip "https://drive.google.com/uc?export=download&id=theIDofthefile" & tar -%s file.zip`, tarMode))
err := cmdEnsure.Run()

Este código en Go dará error porque:
curl: (1) Protocol "https" not supported or disabled in libcurl.

Ahora entiendo que esto ocurre debido a mi comilla doble. Sin embargo, si la elimino, obtengo Id is not recognized as an internal or external command, operable program or batch file, lo cual tiene sentido porque el & simplemente significa ejecutar otro comando en cmd.

Entonces, ¿cuáles son mis opciones para ejecutar ese comando de descarga y extracción?
El propio comando se ejecuta bien en cmd.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como experto en tecnología de la información especializado en Windows, Go, cmd, exe y comillas dobles, hay algunas opciones que puedes explorar para ejecutar el comando de descarga y extraerlo.

    Una opción es escapar las comillas dobles usando una barra invertida (\”). Esto le indica al compilador de Go que trate las comillas como parte de la cadena del comando y no como delimitadores de cadena. Por ejemplo:

    cmdEnsure := *exec.Command("cmd", "/C", "curl -L -o file.zip \"https://drive.google.com/uc?export=download&id=elIDdelfichero\" && tar -xf file.zip")
    err := cmdEnsure.Run()
    

    Otra opción es usar comillas simples en lugar de comillas dobles para encerrar la URL. Esto le indica al compilador de Go que trate las comillas como parte de la cadena del comando y no como delimitadores de cadena. Por ejemplo:

    cmdEnsure := *exec.Command("cmd", "/C", "curl -L -o file.zip 'https://drive.google.com/uc?export=download&id=elIDdelfichero' && tar -xf file.zip")
    err := cmdEnsure.Run()
    

    Finalmente, también puedes intentar usar la función strconv.Quote para agregar comillas alrededor de la URL mientras se escapan los caracteres especiales. Por ejemplo:

    url := "https://drive.google.com/uc?export=download&id=elIDdelfichero"
    quoted := strconv.Quote(url)
    cmdEnsure := *exec.Command("cmd", "/C", "curl -L -o file.zip "+quoted+" && tar -xf file.zip")
    err := cmdEnsure.Run()
    

    Cualquiera que sea la opción que elijas, asegúrate de probarla a fondo para asegurarte de que funcione como se espera.

Comments are closed.