Je veux exécuter un programme via mon code Elixir. Quelle est la méthode pour appeler une commande Shell sur une chaîne donnée? Y a-t-il quelque chose qui n'est pas spécifique à la plate-forme?
Voici comment exécuter une commande Shell simple sans arguments:
System.cmd("whoami", [])
# => {"lukas\n", 0}
Consultez la documentation sur System
pour plus d'informations.
Vous pouvez jeter un œil dans le Erlang os Module . Par exemple. cmd(Command) -> string()
devrait être ce que vous recherchez.
La bibliothèque "devinus/sh" est une autre approche intéressante pour exécuter les commandes Shell.
System.cmd/3 semble accepter les arguments de la commande sous forme de liste et n'est pas satisfait lorsque vous essayez de glisser des arguments dans le nom de la commande. Par exemple
System.cmd("ls", ["-al"]) #works, while
System.cmd("ls -al", []) #does not.
Ce qui se passe en fait en dessous, ce sont les appels System.cmd/3: os.find_executable/1 avec son premier argument, qui fonctionne très bien pour quelque chose comme ls mais renvoie false pour ls -al par exemple.
L'appel erlang attend une liste de caractères au lieu d'un binaire, vous avez donc besoin de quelque chose comme ceci:
"find /tmp -type f -size -200M |xargs rm -f" |> String.to_char_list |> :os.cmd
Je ne peux pas lier directement à la documentation pertinente mais c'est ici sous le module 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.