vida tutorial sinonimo lenguaje learn inmortal framework elixir

sinonimo - elixir tutorial



Ejecutar comandos de shell en Elixir (5)

Aquí es cómo ejecutar un comando de shell simple sin argumentos:

System.cmd("whoami", []) # => {"lukas/n", 0}

Consulte la documentación sobre el System para obtener más información.

Quiero ejecutar un programa a través de mi código de Elixir. ¿Cuál es el método para llamar a un comando de shell a una cadena dada? ¿Hay algo que no sea específico de la plataforma?



No puedo enlazar directamente a la documentación relevante pero está here bajo el módulo del System

cmd(command) (function) # Specs: cmd(char_list) :: char_list cmd(binary) :: binary Execute a system command. Executes command in a command shell of the target OS, captures the standard output of the command and returns the result as a binary. If command is a char list, a char list is returned. Returns a binary otherwise.


Puedes echar un vistazo en el Módulo Erlang os . Por ejemplo, cmd(Command) -> string() debe ser lo que está buscando.


System.cmd / 3 parece aceptar los argumentos del comando como una lista y no está contento cuando intenta colar los argumentos en el nombre del comando. Por ejemplo

System.cmd("ls", ["-al"]) #works, while System.cmd("ls -al", []) #does not.

Lo que de hecho sucede debajo es System.cmd / 3 calls: os.find_executable / 1 con su primer argumento, que funciona bien para algo como ls pero devuelve false para ls -al por ejemplo.

La llamada erlang espera una lista de caracteres en lugar de un binario, por lo que necesita algo como lo siguiente:

"find /tmp -type f -size -200M |xargs rm -f" |> String.to_char_list |> :os.cmd