在 Xcode 的 运行 脚本构建阶段使用 bash glob

Using a bash glob in a Run Script build phase in Xcode

我有一个 Xcode 项目,其构建阶段会复制一些文件。假设我想将所有 rtf 文件从 [项目目录]/foo/bar 复制到 [项目目录]/bar/foo。我会使用这样的命令:

cp -v foo/bar/*.rtf bar/foo/

在终端中执行此操作完全符合我的预期:foo/bar 中的所有 rtf 文件都被复制到 bar/foo。但是在构建时,我从 cp:

得到一个构建错误
Cp: foo/bar/*.rtf: No such file or directory

cp 似乎找不到文件。就好像 bash 没有扩展通配符一样。我知道当脚本 运行s 时我在正确的目录中,因为我在 cp 之前有 运行 pwd 并且它给出了我所期望的。我已经将脚本阶段的 Shell 设置为 /bin/bash。我究竟做错了什么?我不能在 运行 脚本构建阶段使用 glob 吗?如果是,为什么?

更新:found out 你可以像这样在 bash 中关闭 globbing:

set -o noglob

然后像这样重新打开它:

set +o noglob

see all bash options and their status 像这样:

set -o

我尝试在我的 运行 脚本阶段使用后者,它显示 noglob 被禁用。所以 noglob 不是这里的问题。

可以通过查看构建日志中的构建脚本执行来揭示问题(按构建脚本行右侧的图标),您会看到 Xcode 运行s脚本为:

/bin/sh -c \"cp -v foo/bar/*.rtf bar/foo/\"

通配在引号或双引号中不起作用

我通常会编写脚本来执行此类操作,而 运行 则相反。因此,在 .xcodeproj 旁边创建一个 tools 文件夹,并在该脚本中写入复制指令 (tools/copy_pdf_files.sh):

#!/bin/sh
cp -v foo/bar/*.rtf bar/foo/

使其在命令提示符下可执行:

cd /path/to/project
chmod +x tools/copy_pdf_files.sh

然后 运行 改为:

${PROJECT_DIR}/tools/copy_pdf_files.sh

我在没有意识到的情况下将 cp 参数的路径放在双引号内,并且通配在引号中不起作用。问题已解决。