无法在macOS上的bash脚本中访问新生成的临时目录

时间:2016-12-23 20:05:20

标签: bash macos

我正在用这个脚本增强我的.bash_profile。它提取.ipa并显示配置文件信息。 .ipa文件被解压缩到临时目录。

function prov() {
    myTmpDir=`mktemp -d 2>/dev/null || mktemp -d -t 'myTmpDir'`
    unzip -q "$1" -d "${myTmpDir}";
    pathToFile="${myTmpDir}/Payload/*.app/embedded.mobileprovision"
    security cms -D -i "${pathToFile}"
}

问题是security cms无法访问脚本中提取的文件:

mles-MacBook-Pro:2015 mles$ prov gfhZH_v4.7.0_20161222_1544.ipa 
security: unable to open "/var/folders/vc/rmwcd9014fx1__syr239k1740000gn/T/tmp.CrAJbnwj/Payload/*.app/embedded.mobileprovision" for reading: No such file or directory

然而,手动访问它是有效的:

mles-MacBook-Pro:2015 mles$ ls /var/folders/vc/rmwcd9014fx1__syr239k1740000gn/T/tmp.CrAJbnwj/Payload/*.app/embedded.mobileprovision
/var/folders/vc/rmwcd9014fx1__syr239k1740000gn/T/tmp.CrAJbnwj/Payload/fsg4zh.app/embedded.mobileprovision

手动运行security cms -D -i也可以

mles-MacBook-Pro:2015 mles$ security cms -D -i /var/folders/vc/rmwcd9014fx1__syr239k1740000gn/T/tmp.CrAJbnwj/Payload/*.app/embedded.mobileprovision
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
...

为什么在shell脚本中无法实现这一点?

1 个答案:

答案 0 :(得分:1)

引用变量时,通配符不会扩展。由于您希望展开*.app,因此您必须省略引号:

security cms -D -i ${pathToFile}

只要$pathToFile不包含任何空格,这将有效。

如果有可能,您需要拆分变量,因此通配符在引号之外。

security cms -D -i "${myTmpDir}/Payload/"*.app/embedded.mobileprovision