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

executing perl/python/... scripts using exec()

本文关键字:脚本 使用 perl python 执行 exec      更新时间:2023-10-16

我一直在玩linux exec()函数在我的c++程序,我试图执行脚本(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方法,以便自动解析解释器的路径…

谁能指出我做错了什么?

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

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

使用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二进制文件,并且不依赖于硬编码位置(您几乎可以肯定/usr/bin/env存在)。