在Xcode的Run Script构建阶段使用bash glob

时间:2015-09-01 15:18:59

标签: xcode bash shell glob

我有一个Xcode项目,其构建阶段会复制一些文件。假设我想将[project directory] ​​/ foo / bar中的所有rtf文件复制到[project directory] ​​/ 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没有扩展通配符。我知道当脚本运行时我在正确的目录中,因为我在pwd之前运行cp并且它给出了我期望的结果。我已将脚本阶段的Shell设置为/ bin / bash。我究竟做错了什么?我可以不在运行脚本构建阶段使用globs吗?如果是这样,为什么?

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

set -o noglob

然后将其重新打开:

set +o noglob

see all bash options and their status就像这样:

set -o

我尝试在运行脚本阶段使用后者,并显示noglob已禁用。所以noglob不是问题所在。

2 个答案:

答案 0 :(得分:2)

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

/bin/sh -c \"cp -v foo/bar/*.rtf bar/foo/\"
当用引号或双引号括起来时,

globbing不起作用。

我通常会写一个脚本来做那种东西然后运行它。因此,在tools旁边创建一个.xcodeproj文件夹,然后在该脚本中编写复制说明(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

答案 1 :(得分:0)

我在双引号内有let validateDate (entry: obj) = match entry with | :? DateTime as x -> ValidDate x | :? Nullable<DateTime> as x -> NullableDate | _ BlahBlah 个参数的路径而没有意识到它,并且globbing在引号中不起作用。问题解决了。