如何在System.cmd中使用管道?

时间:2018-05-03 08:27:42

标签: cmd elixir

我有一个功能,它可以获取所有USB连接设备的信息。

connected_devices = :os.cmd('usb-devices | grep -A 1 Product=')

当我使用:os.cmd时,它运行正常。但是,由于:os.cmd没有返回错误代码,因此我想使用System.cmd来更好地处理错误。

connected_deivces = System.cmd("usb-devices", ["|", "grep", "-A", "1", "Product="])

所以我尝试改变上面的功能,但它不会在管道之后执行命令。

如何使用System.cmd管道执行命令?

1 个答案:

答案 0 :(得分:3)

System.cmd只能直接调用一个程序。 os:cmd将命令传递给操作系统的默认shell,允许您使用管道。要对System.cmd执行相同的操作,如果您使用的是Unix,则可以调用/bin/sh

System.cmd("/bin/sh", ["-c", "usb-devices | grep -A 1 Product="])