从Perl获取Shell脚本

rah*_*hul 2 linux shell perl

我在理解为什么源命令行的csh命令在命令行中正常工作但在合并到Perl脚本时无法工作时遇到了一些麻烦.

  my @envvar = ();
  if (-e $ENV{WSDIR}."/<script>.csh") {
    @envvar = `csh -c "cd $WSDIR ; source <script>.csh  ; env"`;
  }
Run Code Online (Sandbox Code Playgroud)

运行时我在Perl脚本中收到如下错误:script.csh:没有这样的文件或目录,而从终端作为csh命令运行按预期工作.在Perl中的csh命令中使用环境变量有什么限制?我该如何克服这个问题.

che*_*ner 6

$WSDIR被插入到空字符串中perl.你需要转义'$',以便它被发送到shell,它可以$WSCIR根据需要扩展.

@envvar = `csh -c "cd \$WSDIR ; source <script>.csh  ; env"`;
Run Code Online (Sandbox Code Playgroud)

或者你可以让perl扩展环境变量本身:

@envvar = `csh -c "cd $ENV{WSDIR} ; source <script>.csh  ; env"`;
Run Code Online (Sandbox Code Playgroud)