Runtime error Process.spawn\u同步错误

Runtime error Process.spawn\u同步错误,runtime-error,vala,spawn,Runtime Error,Vala,Spawn,我在Vala中发现Process.spawn_sync的以下奇怪行为: 如果在命令行中执行此操作: valac-C*.vala 它输出c代码,一切正常 如果我以编程方式执行此操作: 字符串sStdOut,sStdErr,sDir=“.”;内特内尔; 字符串sCmd=“valac-C*.vala”; 字符串argv; bool ok=Shell.parse(sCmd,argv); 如果(确定){ ok=Process.spawn\u sync( sDir, argv, Environ.get(),

我在Vala中发现Process.spawn_sync的以下奇怪行为:

如果在命令行中执行此操作:
valac-C*.vala

它输出c代码,一切正常

如果我以编程方式执行此操作:

字符串sStdOut,sStdErr,sDir=“.”;内特内尔;
字符串sCmd=“valac-C*.vala”;
字符串argv;
bool ok=Shell.parse(sCmd,argv);
如果(确定){
ok=Process.spawn\u sync(
sDir,
argv,
Environ.get(),
spawnlags.SEARCH_路径,
无效的
走出去,
出sStdErr,
出格内尔
);
如果(!ok){
stderr.printf(“%s”,sStdErr);
}
}
它输出:
错误:*.vala未找到


这让我困惑!为什么会这样?

我不确定您从哪里获得Shell.parse,但是

将命令行解析为参数向量,与shell的解析方式大致相同,但不支持shell执行的许多扩展(变量扩展、、运算符、文件名扩展等)


您可以迭代目录并手动匹配它们(如果您想维护glob样式语法,可以使用),或者您可以(ab)使用bash,使用类似于
bash-c'valac-c*.vala'
的东西,而不是直接调用valac。

我不知道的是,shell通常在处理这些事情,而不是应用程序本身。现在知道了;-)现在我自己写了解析器,这似乎不明智。GLib.PatternSpec看起来正是您想要的,它经过良好测试的代码可能没有您的代码那么容易出错(无意冒犯,只是整个“只要有足够的眼球,所有的错误都是肤浅的”东西)。你已经在使用glib了,所以没有理由不使用它。。。