【问题标题】:running eval command from bash script从 bash 脚本运行 eval 命令
【发布时间】:2015-01-09 18:40:21
【问题描述】:

我有一个脚本,我试图在其中运行一个将 Xcode 构建设置导出到会话上下文的 perl 脚本。但由于某种原因,当我运行以下脚本时,$BUILD_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);

【问题讨论】:

  • 调试通常有启发作用。
  • 你的 Perl 脚本没有做任何你不能从 bash 脚本本身做的事情。这里不需要eval,假设您实际使用的是bash,而不是其他与POSIX 兼容的shell。

标签: xcode bash perl shell unix


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您可以使用source scriptname 命令让一切都发生在当前shell 的上下文中,而不是子shell。 (您也可以使用. 作为来源的别名,例如. scriptname。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-07
      • 1970-01-01
      • 2016-10-20
      • 2018-08-19
      • 1970-01-01
      • 2013-02-14
      • 1970-01-01
      相关资源
      最近更新 更多