Elixirコードを使用してプログラムを実行したい。特定の文字列に対してシェルコマンドを呼び出す方法は何ですか?プラットフォーム固有ではないものはありますか?
引数なしで単純なシェルコマンドを実行する方法は次のとおりです。
System.cmd("whoami", [])
# => {"lukas\n", 0}
詳細については、 System
に関するドキュメントをご覧ください。
Erlang os Module をご覧ください。例えば。 cmd(Command) -> string()
はあなたが探しているものでなければなりません。
「devinus/sh」ライブラリは、シェルコマンドを実行する別の興味深いアプローチです。
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
関連するドキュメントに直接リンクすることはできませんが、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.