繁体   English   中英

获取命令行解释器

[英]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

我已经确定要检查SHELLCOMSPEC环境变量,以找到正确的解释器及其规范。

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM