如何在.ex文件中执行此openssl命令?

如何在.ex文件中执行此openssl命令?,openssl,elixir,Openssl,Elixir,我试图在.ex文件中执行此命令- openssl ec -in myprivatekey.pem -outform DER|tail -c +8|head -c 32|xxd -p -c 32 ,我已经翻译成 {_, 0} = System.cmd "openssl", [ "ec", "-in", private_key_file, "-outform", "DER|tail", "-c", "+8|head", "-c", "32|xxd", "-p", "-c", "32"], [s

我试图在.ex文件中执行此命令-

openssl ec -in myprivatekey.pem -outform DER|tail -c +8|head -c 32|xxd -p -c 32
,我已经翻译成

  {_, 0} = System.cmd "openssl", [ "ec", "-in", private_key_file, "-outform", "DER|tail", "-c", "+8|head", "-c", "32|xxd", "-p", "-c", "32"], [stderr_to_stdout: true]
在长生不老药中,但我得到以下错误-


如何正确执行此openssl命令?

您的第一个代码段实际上是在执行多个命令(openssl、tail、head、xxd)并将数据从一个命令传输到下一个命令
System.cmd
只生成一个命令,不会自动处理管道

您可以使用
:os.cmd/1
执行此命令,这将使用系统的默认shell生成命令,该shell应处理管道:

# Note that this takes the command as a charlist and does not return the exit code
output = :os.cmd('openssl ec -in myprivatekey.pem -outform DER|tail -c +8|head -c 32|xxd -p -c 32')
另一种方法是自己使用
System.cmd
将命令传递给shell。以下内容适用于存在
/bin/sh
的系统:

{stdout, 0} = System.cmd("/bin/sh", ["-c", "openssl ec -in myprivatekey.pem -outform DER|tail -c +8|head -c 32|xxd -p -c 32"])