我想执行命令:
xcodebuild -exportArchive -exportFormat IPA -archivePath myApp.xcarchive -exportPath myApp.ipa -exportProvisioningProfile 'myApp adhoc'
上面的命令在简单地在终端中执行时工作正常。但是,我正在尝试在 bash 中的包装函数中执行该命令。包装器函数的工作原理是传递一个命令,然后基本上执行该命令。例如,对包装函数的调用:
wrapperFunction "xcodebuild -exportArchive -exportFormat IPA -archivePath myApp.xcarchive -exportPath myApp.ipa -exportProvisioningProfile 'myApp adhoc'"
和包装函数本身:
wrapperFunction() {
COMMAND="$1"
$COMMAND
}
问题是 'myApp adhoc'
中的单引号,因为当通过 wrapperFunction 运行命令时,我收到错误:error: no provisioning profile matches ''myApp'
。它不会选取预配配置文件的全名'myApp adhoc'
编辑:所以说我还想将另一个字符串传递给包装函数,该字符串不是要执行的命令的一部分。例如,我想传递一个字符串以在命令失败时显示。内部包装函数我可以检查$?命令之后,然后显示失败字符串,如果 $?-ne 0.如何使用命令传递字符串?
不要混合代码和数据。分别传递参数(这是 sudo
和 find -exec
的作用):
wrapperFunction() {
COMMAND=( "$@" ) # This follows your example, but could
"${COMMAND[@]}" # also be written as simply "$@"
}
wrapperFunction xcodebuild -exportArchive -exportFormat IPA -archivePath myApp.xcarchive -exportPath myApp.ipa -exportProvisioningProfile 'myApp adhoc'
要提供自定义错误消息,请执行以下操作:
wrapperFunction() {
error="$1" # get the first argument
shift # then remove it and move the others down
if ! "$@" # if command fails
then
printf "%s: " "$error" # write error message
printf "%q " "$@" # write command, copy-pastable
printf "n" # line feed
fi
}
wrapperFunction "Failed to frub the foo" frubber --foo="bar baz"
这将生成消息Failed to frub the foo: frubber --foo=bar baz
。
由于引用方法并不重要,并且不会传递给命令或函数,因此输出的引用方式可能与此处不同。它们在功能上仍将相同。