Xcode 从bash脚本运行eval命令

Xcode 从bash脚本运行eval命令,xcode,bash,perl,shell,unix,Xcode,Bash,Perl,Shell,Unix,我有一个脚本,试图在其中运行一个perl脚本,该脚本将Xcode构建设置导出到会话的上下文中。但是由于某种原因,当我运行下面的脚本时,$BUILD\u DIR总是空的。但是当我从命令行运行同一组命令时,它工作得非常好。我错过什么了吗 #!/bin/sh { yes | ./perlScript.pl; runPerl=`perl perlScript.pl` eval $runPerl; echo Build path is $BUILD_DIR; } ech

我有一个脚本,试图在其中运行一个perl脚本,该脚本将Xcode构建设置导出到会话的上下文中。但是由于某种原因,当我运行下面的脚本时,
$BUILD\u DIR
总是空的。但是当我从命令行运行同一组命令时,它工作得非常好。我错过什么了吗

#!/bin/sh

{
    yes | ./perlScript.pl;
    runPerl=`perl perlScript.pl`
    eval $runPerl;
    echo Build path is $BUILD_DIR;
}

echo all operations are done!
perl脚本,作为参考

#!/usr/bin/perl
open(FH, "xcodebuild -project MyProj.xcodeproj -scheme MyScheme -showBuildSettings|");
while(<FH>) {
 if (/\s*(\w+)\s*=\s*(.*)$/) { # Search for <key> = <value>
 $key = $1; $value = $2;
 print "export $key='$value'\n";
 }
}
close(FH);
#/usr/bin/perl
打开(FH,“xcodebuild-projectmyproj.xcodeproj-scheme-MyScheme-showBuildSettings |”);
while(){
如果(/\s*(\w+)\s*=\s*(.*)$/){搜索=
$key=$1;$value=$2;
打印“导出$key='$value'\n”;
}
}
关闭(FH);

环境继承?当您启动sh脚本时,它不知道关于$BUILD_DIR的任何信息,甚至在这之后它也不会知道,因为源pl脚本将继承您的sh脚本的环境。

您可以使用
源scriptname
命令在当前shell的上下文中进行所有操作,而不是子shell。(您还可以使用
作为源代码的别名,例如
.scriptname

调试通常具有启发性的效果。您的Perl脚本不会执行任何您在
bash
脚本本身无法执行的操作。这里不需要
eval
,假设您实际使用的是
bash
,而不是其他与POSIX兼容的shell。