我有一个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
不是问题所在。
答案 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在引号中不起作用。问题解决了。