Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell OS.Process.system的安全版本_Shell_Exec_Sml - Fatal编程技术网

Shell OS.Process.system的安全版本

Shell OS.Process.system的安全版本,shell,exec,sml,Shell,Exec,Sml,标准ML提供了一个函数 val system : string -> status 在中,它通过shell调用参数 由于引用的复杂性、安全性问题等等,如果不需要shell的特性,通常最好避免使用shell。因此,大多数语言也提供了直接执行功能 我在标准ML中找不到类似的东西。我希望它的类型与 val system : string -> string list -> status 如何不通过system shell调用某些东西?如果您的应用程序运行在某种Unix风格上,您可

标准ML提供了一个函数

val system : string -> status
在中,它通过shell调用参数

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

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

val system : string -> string list -> status

如何不通过system shell调用某些东西?

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


谢谢我假设这可以在Linux和OS X上运行。我想这种结构在Windows上是可用的,是吗?@JoachimBreitner我没有要测试的Windows机器,所以我不知道。不过,我对此表示怀疑。@JoachimBreitner Unix结构的在线文档以诱人的结尾:“实现说明:尽管此模块的风格受到Unix的严重影响,并且该模块在给定Posix子系统的情况下易于实现,但功能的指定级别足够高,因此实现(包括非Unix的实现)可以提供此模块,而无需提供所有Posix模块。“。这表明它应该可以在Windows中工作,尽管很难提前知道需要做多少工作。在Windows上,您可以使用Windows结构执行几乎完全相同的操作。这至少在Poly/ML中可用。
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;