我的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();
提前感谢您的回答。 马捷
答案 0 :(得分:2)
当您从shell运行cat /etc/*-release
时, 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()
位; a fellow stacker has provided his own glob()
mechanism in another answer