1

我的 linux 命令中的星号有一点问题 - 我需要找出发行版。当我替换这个字符女巫时,例如'fedora',那么这个命令给出了很好的结果。在这种情况下,它会这样写: /bin/cat: /etc/*-release: 目录或文件不存在。

我的代码是:

    Process p = new Process();
    p.StartInfo.UseShellExecute = false;
    p.StartInfo.RedirectStandardOutput = true;
    p.StartInfo.FileName = "cat";
    p.StartInfo.Arguments = "/etc/*-release";
    p.Start();
    string output = p.StandardOutput.ReadToEnd();
    p.WaitForExit();

提前感谢您的回答。马泰

4

1 回答 1

2

当您cat /etc/*-release从 shell 运行时,shell负责将 扩展*为匹配文件的列表(如果有)。

当您自己直接执行程序时(就像您在此处使用Process接口所做的那样),您需要自己重新创建 shell 的行为。这实际上是最好的,因为cat从功能齐全的编程语言中读取文件有点愚蠢——当然,该语言为以下逻辑等价物提供了一些简单的东西:

list = glob(/etc/*-release)
foreach file in (list):
    fd = open(file, "read");
    contents = read(fd)
    close(fd)
    dosomething_with(contents)

您可以使用任何您喜欢的机制来替换glob()那里的位;一个堆垛机同事在另一个答案中提供了他自己的glob()机制。

于 2012-04-23T00:34:41.933 回答