Подтвердить что ты не робот

Выполнить команды оболочки в Elixir

Я хочу выполнить программу через мой код Elixir. Каков метод вызова команды оболочки для данной строки? Есть ли что-то, что не является специфичным для платформы?

4b9b3361

Ответ 1

Вот как вы выполняете простую команду оболочки без аргументов:

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

Ознакомьтесь с документацией о System для получения дополнительной информации.

Ответ 2

Вы можете посмотреть в Erlang os Module. Например. cmd(Command) -> string() должен быть тем, что вы ищете.

Ответ 3

Библиотека "devinus/sh" - еще один интересный подход для запуска команд оболочки.

https://github.com/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