这就是system
工作原理:它创建一个子shell 来执行您的命令,当命令完成时,子shell 退出,您的perl
进程不受影响。
Perl FAQ 的第 8 节也回答了这个问题。
我在 perl 脚本中{更改了目录,修改了我的环境}。当我退出脚本时,更改为什么消失了?如何让我的更改可见?
从最严格的意义上说,它是无法完成的——脚本作为与其启动时所在的 shell 不同的进程执行。对流程的更改不会反映在其父进程中 - 只会反映在更改后创建的任何子进程中。有一种 shell 魔法可以让你通过eval()
在 shell 中输入脚本的输出来伪造它;查看comp.unix.questions 常见问题以了解详细信息。
你想要代码
system("cd /home/project/env/NeededEnvironment && make cfile.o") == 0
or warn "$0: make failed";
或使用-C
选项来make
避免 shell 参数解析,如
system("make", "-C", "/home/project/env/NeededEnvironment", "cfile.o") == 0
or warn "$0: make failed";