具体而言,它是如何解释引号中的参数或标准输入重定向的参数(例如<)?Vala的Process.spawn_command_line_async在解释CLI参数时遵循了哪些规则?
我有以下字符串:
string cmd = "mail -s 'Work Order #%s' -c %s -r [email protected] %s < email.txt".printf(wo.get_text(), ownmail, outmail.get_text());
当我使用
Posix.system(cmd);
命令运行正常和发送电子邮件,从email.txt取了身体。
当我使用
Process.spawn_command_line_async(cmd);
我从邮件命令的错误“-c选项未找到”或类似的话。当我在工作订单#%s周围丢失了引号,而是转义空格时,电子邮件发送(包含反斜杠的主题行),而不是从email.txt获取邮件正文,它会将email.txt视为该电子邮件的另一个收件人(它显示在我的收件箱中,收件人部分的'email.txt')。 <正被忽略或丢弃。要检查的事情了,我用
Process.spawn_command_line_async("echo %s".printf(cmd));
这向我表明围绕主题行中的引号被丢弃,但<仍然存在。我可以在我的程序中使用Posix.system(),但为了简单起见,减少了依赖性(并且更具惯用性),我宁愿使用Process.spawn_command_line()。我错过了什么?
谢谢!
从'echo'的输出将不会有,如果报价这是由shell运行的,因为shell不会因为spawn_command_line_async而删除它们。你会看到在该命令中使用'set -vx'(假设再次使用一个shell)来查看哪些参数/ etc。 shell *实际*看到。 –