在perl中发出系统命令

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)

谢谢!

Die*_*lla 7

.source(等价物)是bash内部命令.系统调用尝试查找可执行文件(空格之前的第一位)并且找不到它(.不存在可执行文件,因为它是bash内部命令).

您必须直接使用系统执行bash(或您正在使用的shell):

system ("/bin/bash ./setenv.sh");
Run Code Online (Sandbox Code Playgroud)

但是,请注意,除非setenv.sh有一些副作用,否则您尝试执行的操作无效,因为您开始读取该环境的shell在执行该system行之后就会死亡.要为perl程序建立环境,您应该使用该%ENV变量.