【发布时间】:2012-12-11 18:38:23
【问题描述】:
我为各种配置做了一些构建设置,例如
例如
我可以像这样在各种文件(例如 info.plist)中访问它们:
${MYTESTSETTING}
但是可以在命令行环境中获取值吗?例如在 Jenkins 的 xcodebuild 之后
我试过了
echo ${MYTESTSETTING}
和
echo $MYTESTSETTING
【问题讨论】:
我为各种配置做了一些构建设置,例如
例如
我可以像这样在各种文件(例如 info.plist)中访问它们:
${MYTESTSETTING}
但是可以在命令行环境中获取值吗?例如在 Jenkins 的 xcodebuild 之后
我试过了
echo ${MYTESTSETTING}
和
echo $MYTESTSETTING
【问题讨论】:
xcodebuild -showBuildSettings
显示所有构建设置,包括用户定义的设置。示例:
$ xcodebuild -configuration Debug -showBuildSettings | grep MYTESTSETTING
MYTESTSETTING = DebugValue
$ xcodebuild -configuration Release -showBuildSettings | grep MYTESTSETTING
MYTESTSETTING = ReleaseValue
要将这些变量放入当前 shell 的环境中,您必须解析此输出。例如,这可以通过 Perl 脚本(或许多其他脚本语言)来完成。
创建一个包含以下内容的 Perl 脚本“exportsettings.pl”:
#!/usr/bin/perl
open(FH, "xcodebuild -configuration Release -showBuildSettings|");
while(<FH>) {
if (/\s*(\w+)\s*=\s*(.*)$/) { # Search for <key> = <value>
$key = $1; $value = $2;
print "export $key='$value'\n";
}
}
close(FH);
现在你可以运行命令了
$ eval `perl exportsettings.pl`
从命令行,并且(几乎)所有构建设置都在环境中。 (会有一些错误信息,例如“UID: readonly variable”)。
如果您只需要环境中使用定义的设置,则可以使用唯一前缀(例如“MY”)并更改行
if (/\s*(\w+)\s*=\s*(.*)$/) { # Search for <key> = <value>
到
if (/\s*(MY\w+)\s*=\s*(.*)$/) { # Search for MY<key> = <value>
【讨论】:
eval 命令的shell 环境。其他外壳或系统不受影响。我认为这就是 OP 想要的。 - 但我会更改我的答案以使其更清楚,谢谢您的反馈!