OS.Process.system 的安全版本

Safe version of OS.Process.system

标准ML提供了一个函数

val system : string -> status

OS.Process 中通过 shell 调用参数。

如果由于引用的复杂性、安全问题等原因不需要它的功能,通常最好避免使用 shell。所以大多数语言也提供了直接执行的功能。

我在标准 ML 中找不到类似的东西。我希望它的类型类似于

val system : string -> string list -> status

如何不通过系统调用某些内容 shell?

如果您的应用程序在某种 Unix 风格上运行,您可以使用可选的 Unix structure,由 SML/NJ(至少)实现:

val proc : (TextIO.instream, TextIO.outstream) Unix.proc =
  Unix.execute ("/bin/ls", ["-l"]);
val inStream = Unix.textInstreamOf proc;
val output = TextIO.inputAll inStream;
TextIO.closeIn inStream;
Unix.reap proc;
print output;