[英]Getting the command line interpreter
我的应用程序接受一个字符串命令,并在某个过程中重复执行该命令,每次都使用不同的环境变量。 为了支持任何类型的命令,我使用指定的命令运行cmd /C
,系统负责解析和运行该命令。 但是,我考虑通过在这些系统上调用sh -c
来使应用程序与Unix .NET实现兼容。
因此,我想以最可移植的方式确定两件事-应该执行的正确解释器(在Windows上为cmd
,在Unix上为sh
或用户指定的用户指定),以及它接受的变量的样式(在Windows上为%var%
,在Unix上$var
)。
目前,我考虑检查COMSPEC
环境变量是否指向Windows样式的命令行解释器并使用它,或者查找SHELL
变量并使用它。 有没有更好管理的替代方法,或者这是否足够?
我可能在这里误解了一些东西,但是为什么不使用System.Environment.OSVersion.Platform
?
我已经确定要检查SHELL
和COMSPEC
环境变量,以找到正确的解释器及其规范。
static void GetSystemShell(out bool comspec, out string fileName, out string arguments)
{
fileName = Environment.GetEnvironmentVariable("COMSPEC");
if(fileName != null)
{
comspec = true;
}else{
fileName = Environment.GetEnvironmentVariable("SHELL");
if(fileName != null)
{
comspec = false;
}else{
fileName = "cmd";
comspec = true;
}
}
if(comspec)
{
arguments = "/C";
}else{
arguments = "-c";
}
}
如果同时设置了两个变量,则它首选COMSPEC
兼容的解释器。 将命令传递到解释器的工作方式之间也存在差异, SHELL
希望将命令作为一个(正确转义的)参数,而COMSPEC
只需将命令用附加引号引起来,则效果最佳。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.