我有一个简单的脚本,如下所示:
#!/bin/sh
set -eux
install_folder="${HOME}/Library/MobileDevice/Provisioning Profiles"
mkdir -p "${install_folder}"
if [[ $? != 0 ]]; then
echo "Unable to create destination directory: ${install_folder}"
exit 1
fi
如果我通过执行./my_script.sh
从命令行运行此脚本,那么一切都会按预期进行。但是,当我在运行脚本构建阶段从Xcode进行调用时,事情会出错。我目前通过在运行脚本构建阶段中使用"${SRCROOT}/path/to/my_script.sh"
来调用它,但是即使我直接复制并粘贴上面的代码,也会出现相同的问题。
那是什么问题?好吧,似乎Xcode导致创建了错误的文件夹。从命令行运行时,按预期,在Provisioning Profiles
内有一个名为~/Library/MobileDevice/
的文件夹。当我从Xcode运行时,该文件夹名为Provisioning\ Profiles
(\
实际上是名称的一部分)。
但是变得奇怪了。如果我将mkdir
行更改为mkdir -p $install_folder
,那么我希望在Provisioning
文件夹中有一个名为MobileDevice
的文件夹,无论我在哪里都可以找到一个名为Profiles
的文件夹运行命令。这就是我从命令行运行时发生的情况。但是,如果我从Xcode运行,则会在Profiles
内获得一个文件夹MobileDevice
,但也会得到一个名为Provisioning\ Profiles
的文件夹。
我根本无法解释这种行为。这似乎与我(曾经)对shell脚本了解的一切完全相反。
Xcode如何影响这一点?我如何使其停止?
答案 0 :(得分:0)
一如既往,诀窍是意识到这件事比我想象的要多。 Xcode不仅在阶段中运行此脚本,还通过设置一组输出文件来执行此脚本。然后,它在运行脚本之后为那些创建路径。该脚本的行为与应有的完全一样,只是多余的内容使该脚本似乎已损坏。
经验教训:如果Xcode不存在,它将为输出文件创建一个文件夹。