处理空间和Xcode构建阶段Bash运行脚本中的特殊字符

时间:2016-03-31 15:46:32

标签: xcode bash plist

我的Xcode项目Bash Run Script中有自定义Build Phases。它将官方版本号写入plist。

#proper escape for spaces
TARGET_BUILD_DIR=${TARGET_BUILD_DIR//" "/"\ "}

echo "Setting marketing version, CFBundleShortVersionString, to $VERSION in $TARGET_BUILD_DIR/$INFOPLIST_PATH..."

/usr/libexec/PlistBuddy -c "Set CFBundleShortVersionString $VERSION" $TARGET_BUILD_DIR/$INFOPLIST_PATH

echo "Setting technical version, CFBundleVersion, to $BUILD in $TARGET_BUILD_DIR/$INFOPLIST_PATH..."

/usr/libexec/PlistBuddy -c "Set CFBundleVersion $BUILD" $TARGET_BUILD_DIR/$INFOPLIST_PATH

只要路径没有空格或特殊字符,这就可以正常工作。

尝试调用此代码时会发生以下情况:

  

将营销版本CFBundleShortVersionString设置为1.7.0.0 in   /Users/jenkins/.jenkins/jobs/ClientName/jobs/iOS/jobs/What's   Up / workspace / build / WhatsUp.app / Info.plist ...文件不存在,Will   创建:/Users/jenkins/.jenkins/jobs/ClientName/jobs/iOS/jobs/What   参数无效

     

将技术版本CFBundleVersion设置为199 in   /Users/jenkins/.jenkins/jobs/ClientName/jobs/iOS/jobs/What's   Up / workspace / build / WhatsUp.app / Info.plist ...文件不存在,Will   创建:/Users/jenkins/.jenkins/jobs/ClientName/jobs/iOS/jobs/What   参数无效

echo很好地选择了目录,但PlistBuddy在尝试使用相关目录时返回错误。

到目前为止,我已经尝试过许多事情,例如使用'\'转义空格和特殊字符:

#replace spaces attempt
TARGET_BUILD_DIR=${TARGET_BUILD_DIR//" "/"\ "}
TARGET_BUILD_DIR=${TARGET_BUILD_DIR// /\ }

#replace apostrophes attempt
TARGET_BUILD_DIR=${TARGET_BUILD_DIR//"'"/"\'"}
TARGET_BUILD_DIR=${TARGET_BUILD_DIR//'/\'}

如何让PlistBuddy接受具有空格或特殊字符的目录,我该怎么做?

1 个答案:

答案 0 :(得分:1)

事实证明,不需要替换空格和特殊字符。

@Etan Reisner关于引用变量扩展的评论使我尝试了各种与此有关的其他事情。

单独引用"$TARGET_BUILD_DIR""$INFOPLIST" 可以解决问题:

Setting marketing version, CFBundleShortVersionString, to $VERSION in $TARGET_BUILD_DIR/$INFOPLIST_PATH..."
/usr/libexec/PlistBuddy -c "Set CFBundleShortVersionString $VERSION" "$TARGET_BUILD_DIR"/"$INFOPLIST_PATH"

Setting technical version, CFBundleVersion, to $BUILD in $TARGET_BUILD_DIR/$INFOPLIST_PATH..."
/usr/libexec/PlistBuddy -c "Set CFBundleVersion $BUILD" "$TARGET_BUILD_DIR"/"$INFOPLIST_PATH"