perl 无法“exec”二进制文件

perl 无法“exec”二进制文件

在我全新安装的 Debin 中,默认安装了 perl intepreter(换句话说,我还没有其他 perl 软件包)。但是,尝试这样做:

$ls
a.cpp b.cpp
$ perl -e 'system "g++ -o a.out a.cpp b.cpp"; exec "a.out"'

没有输出(没有错误,什么也没有)。 Perl 正确使用了该system命令(即,它创建了a.out可执行文件),但无法分叉它。为什么?

答案1

答案就在的文档exec但如果您不知道自己在寻找什么,就很难看到。

如果 LIST 中有多个参数,则会调用 execvp(3) 使用 LIST 中的参数。如果 LIST 中只有一个元素,则检查参数是否有 shell 元字符,如果有,则将整个参数传递到系统的命令 shell 进行解析 (...)。如果参数中没有 shell 元字符,则将其拆分为单词并直接传递给 execvp(……)。

在所有情况下,命令名称都受路径查找(通过 Perl 或 shell):如果它不包含/,则在命令搜索路径 ( ) 中查找$PATH,该路径通常不包含当前目录。

改成

exec "./a.out"

答案2

...但不能分叉它

exec根本不分叉,而是用新代码(a.out)替换当前运行的应用程序代码(即 perl)。

除此之外,还不清楚预期会产生什么输出a.out,即问题可能出在perl 上a.out,而不是 perl 上。

也可能是系统根本不在a.out本地目录中查找二进制文件,因为PATH环境变量没有显式包含..要强制执行,请exec "./a.out"改为执行。

相关内容