我在Vala中发现了Process.spawn_sync的以下奇怪行为:
如果我在命令行中执行此操作:
valac -C *.vala
它输出c代码,一切都很好。
如果我以编程方式完成:
string sStdOut, sStdErr, sDir = "."; int nErr;
string sCmd = "valac -C *.vala";
string argv;
bool ok = Shell.parse( sCmd, argv );
if (ok) {
ok = Process.spawn_sync(
sDir,
argv,
Environ.get(),
SpawnFlags.SEARCH_PATH,
null,
out sStdOut,
out sStdErr,
out nErr
);
if (!ok) {
stderr.printf("%s", sStdErr);
}
}它输出:
error: *.vala not found
这让我很困惑!为什么会这样呢?
发布于 2014-03-16 11:01:59
我不知道你从哪里弄到Shell.parse的但是GLib.Shell.parse_argv
“将命令行解析为参数向量,与shell的方式非常相似,但没有shell将执行的许多扩展(不支持变量扩展、、运算符、文件名扩展等)。”
您可以遍历目录并手动匹配它们(如果您想保持glob风格的语法,可以使用GLib.PatternSpec ),或者您可以(Ab)使用bash -c 'valac -C *.vala'之类的东西来使用bash,而不是直接调用valac。
https://stackoverflow.com/questions/22431681
复制相似问题