2017-09-13 1 views
-1

Je suis en train d'exécuter cette commande dans un fichier .ex -Comment exécuter cette commande openssl dans un fichier .ex?

openssl ec -in myprivatekey.pem -outform DER|tail -c +8|head -c 32|xxd -p -c 32 

, que je l'ai traduit à

{_, 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] 

en élixir, mais im obtenir l'erreur suivante - error

Comment exécuter correctement cette commande openssl?

Répondre

2

Votre premier extrait de code exécute en réalité plusieurs commandes (openssl, tail, head, xxd) et les données de tuyauterie de l'un à l'autre. System.cmd génère une seule commande et ne gère pas automatiquement les tuyaux.

Vous pouvez utiliser :os.cmd/1 pour exécuter ce qui engendrera la commande en utilisant le shell par défaut du système, qui devrait gérer les tuyaux:

# 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') 

Une autre façon est de passer la commande à un shell vous en utilisant System.cmd. Ce qui suit devrait fonctionner sur les systèmes qui ont /bin/sh présent:

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