sim*_*mar 1 unix bash shell perl
我很难搞清楚为什么以下命令没有在perl中执行.
system(". ./setenv.sh");
Run Code Online (Sandbox Code Playgroud)
我尝试了其他替代品
ALT 1 = system ".", "./setenv.sh";
ALT 2 = `. ./setenv.sh`;
Run Code Online (Sandbox Code Playgroud)
不知道我做错了什么..有什么想法吗?
编辑:我想到了这里提到的一些想法,这就是我做的..
system(". ./setenv.sh && <other commands that I required the env for here>");
Run Code Online (Sandbox Code Playgroud)
谢谢!
.和source(等价物)是bash内部命令.系统调用尝试查找可执行文件(空格之前的第一位)并且找不到它(.不存在可执行文件,因为它是bash内部命令).
您必须直接使用系统执行bash(或您正在使用的shell):
system ("/bin/bash ./setenv.sh");
Run Code Online (Sandbox Code Playgroud)
但是,请注意,除非setenv.sh有一些副作用,否则您尝试执行的操作无效,因为您开始读取该环境的shell在执行该system行之后就会死亡.要为perl程序建立环境,您应该使用该%ENV变量.