web-dev-qa-db-ja.com

Elixirでシェルコマンドを実行する

Elixirコードを使用してプログラムを実行したい。特定の文字列に対してシェルコマンドを呼び出す方法は何ですか?プラットフォーム固有ではないものはありますか?

60
Lahiru

引数なしで単純なシェルコマンドを実行する方法は次のとおりです。

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

詳細については、 System に関するドキュメントをご覧ください。

86
Overbryd

Erlang os Module をご覧ください。例えば。 cmd(Command) -> string()はあなたが探しているものでなければなりません。

11
Jonas

「devinus/sh」ライブラリは、シェルコマンドを実行する別の興味深いアプローチです。

https://github.com/devinus/sh

9
parroty

System.cmd/3はコマンドへの引数をリストとして受け入れているようで、コマンド名に引数を忍び込もうとすると不満を感じます。例えば

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

実際にその下で起こるのは、System.cmd/3が最初の引数で:os.find_executable/1を呼び出すことです。これは、lsなどの場合は正常に機能しますが、たとえばls -alの場合はfalseを返します。

Erlang呼び出しは、バイナリではなくcharリストを想定しているため、次のようなものが必要です。

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

関連するドキュメントに直接リンクすることはできませんが、Systemモジュールの下の here です

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