Domanda Esegui comandi shell in elisir


Voglio eseguire un programma attraverso il mio codice Elixir. Qual è il metodo per chiamare un comando shell su una determinata stringa? C'è qualcosa che non è specifico per la piattaforma?


44
2018-03-23 18:15


origine


risposte:


Ecco come si esegue un semplice comando shell senza argomenti:

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

Controlla la documentazione su System per maggiori informazioni.


68
2018-02-01 09:17



Puoi dare un'occhiata in Modulo Erlang os. Per esempio. cmd(Command) -> string() dovrebbe essere quello che stai cercando.


11
2018-03-23 18:43



La libreria "devinus / sh" è un altro approccio interessante per eseguire comandi di shell.

https://github.com/devinus/sh


9
2018-03-24 14:00



Non riesco a collegarmi direttamente alla documentazione pertinente, ma lo è Qui sotto il System modulo

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.

5
2018-03-24 12:12



System.cmd / 3 sembra accettare gli argomenti del comando come un elenco e non è felice quando si tenta di intrufolarsi negli argomenti nel nome del comando.  Per esempio

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

Quello che in effetti accade sotto è System.cmd / 3 chiamate: os.find_executable / 1 con il suo primo argomento, che funziona bene per qualcosa come ls ma restituisce false per ls -al per esempio.

La chiamata erlang richiede una lista di caratteri anziché un binario, quindi è necessario qualcosa come il seguente:

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

4
2018-05-25 12:49