Я хочу выполнить программу через мой код Elixir. Каков метод вызова команды оболочки для данной строки? Есть ли что-то, что не является специфичным для платформы?
Выполнить команды оболочки в Elixir
Ответ 1
Вот как вы выполняете простую команду оболочки без аргументов:
System.cmd("whoami", [])
# => {"lukas\n", 0}
Ознакомьтесь с документацией о System
для получения дополнительной информации.
Ответ 2
Вы можете посмотреть в Erlang os Module. Например. cmd(Command) -> string()
должен быть тем, что вы ищете.
Ответ 3
Библиотека "devinus/sh" - еще один интересный подход для запуска команд оболочки.
Ответ 4
Я не могу напрямую ссылаться на соответствующую документацию, но здесь в модуле 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.
Ответ 5
System.cmd/3, похоже, принимает аргументы команды в виде списка и недовольна, когда вы пытаетесь проникнуть в аргументы в имени команды. Например
System.cmd("ls", ["-al"]) #works, while
System.cmd("ls -al", []) #does not.
То, что на самом деле происходит внизу, это вызовы System.cmd/3: os.find_executable/1 с его первым аргументом, который отлично подходит для чего-то вроде ls, но возвращает false для ls -al, например.
В запросе erlang вместо отображается список char, поэтому вам нужно что-то вроде следующего:
"find /tmp -type f -size -200M |xargs rm -f" |> String.to_char_list |> :os.cmd