使用exec()执行perl / python / ...脚本

时间:2011-09-20 21:01:18

标签: c++ linux exec

我一直在使用我的C ++程序中的linux exec()函数,我正在尝试执行脚本(perl,python,php,...)。

从bash

我可以执行例如:sh -c“perl /home/ignition/test.pl”

execl("/bin/sh", "sh", "-c", "\"perl /home/ignition/test.pl\"", NULL);

不起作用。这确实有效:

execl("/bin/sh", "sh", "-c", "/home/ignition/test.pl", NULL);

但是这依赖于将perl解释器指定为脚本的第一行的正确路径,这不是非常通用的,例如这不适用于php脚本。我想使用sh -c方法,因此解释器的路径会自动解决...

有谁可以指出我做错了什么?

2 个答案:

答案 0 :(得分:2)

在第一个示例中,您尝试执行名为"perl的程序,提供文件/home/ignition/test.pl"作为第一个参数。直接使用shell时,它会在启动程序之前删除引号。

试试这个:execl("/bin/sh", "sh", "-c", "perl /home/ignition/test.pl", NULL);

答案 1 :(得分:1)

使用exec函数时,不需要在包含空格的参数周围使用引号。尝试:

execl("/bin/sh", "sh", "-c", "perl /home/ignition/test.pl", NULL);

或者,您可以更改脚本中的shebang行:

#!/usr/bin/perl -w

#!/usr/bin/env perl -w

env程序知道如何搜索PATH以查找perl二进制文件并且不依赖于硬编码位置(您几乎可以肯定{{1} }))。