【问题标题】:Xcode appears to be modifying paths inside bash scripts during run script build phaseXcode 似乎在运行脚本构建阶段修改了 bash 脚本中的路径
【发布时间】:2020-03-13 01:19:03
【问题描述】:

我有一个如下所示的简单脚本:

#!/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 导致创建了错误的文件夹。当我从命令行运行时,我在~/Library/MobileDevice/ 中得到了一个名为Provisioning Profiles 的文件夹,正如预期的那样。当我从 Xcode 运行时,该文件夹被命名为 Provisioning\ Profiles\ 实际上是名称的一部分)。

但它变得更奇怪了。如果我将mkdir 行更改为mkdir -p $install_folder,那么我希望在MobileDevice 文件夹中获得一个名为Provisioning 的文件夹,并在我运行命令的任何位置获得一个名为Profiles 的文件夹。这就是我从命令行运行时发生的情况。但是,如果我从 Xcode 运行,我会在 MobileDevice 中得到一个文件夹 Profiles,但我也会得到一个名为 Provisioning\ Profiles 的文件夹。

我根本无法解释这种行为。这似乎与我(认为)对 shell 脚本的了解完全相反。

Xcode 对此有何影响?我如何让它停止?

【问题讨论】:

    标签: xcode shell


    【解决方案1】:

    与往常一样,诀窍是意识到这比我想象的要多。 Xcode 不只是在阶段运行这个脚本,它使用一组输出文件列表来执行它。然后它在运行脚本后为那些创建路径。脚本的行为与它应有的完全一样,只是额外的东西使它看起来被破坏了。

    经验教训:如果输出文件不存在,Xcode 将为输出文件创建一个文件夹。

    【讨论】:

      猜你喜欢
      • 2015-11-26
      • 2020-09-04
      • 2010-11-23
      • 2015-01-18
      • 1970-01-01
      • 2017-01-30
      • 1970-01-01
      • 1970-01-01
      • 2011-10-26
      相关资源
      最近更新 更多