我要執行的命令:時只需在終端執行猛砸單引號
xcodebuild -exportArchive -exportFormat IPA -archivePath myApp.xcarchive -exportPath myApp.ipa -exportProvisioningProfile 'myApp adhoc'
上面的命令工作正常。但是,我試圖在bash中的包裝函數中執行命令。包裝函數通過傳遞一個命令並基本執行該命令來工作。例如,在wrapperFunction打電話:
wrapperFunction "xcodebuild -exportArchive -exportFormat IPA -archivePath myApp.xcarchive -exportPath myApp.ipa -exportProvisioningProfile 'myApp adhoc'"
和wrapperFunction本身:
wrapperFunction() {
COMMAND="$1"
$COMMAND
}
的問題是在'myApp adhoc'
單引號,因爲通過wrapperFunction運行命令時出現錯誤:error: no provisioning profile matches ''myApp'
。它不是拿起供應配置文件的全名'myApp adhoc'
編輯:這麼說,我也想通過一個可替換的wrapperFunction,這不是要執行的命令的一部分。例如,如果命令失敗,我想傳遞一個字符串來顯示。內部包裝函數我可以檢查$?在命令之後再顯示失敗字符串if $? -ne 0.我怎樣才能傳遞一個字符串與命令?
完美地工作。非常感謝。仔細闡述它是如何工作的? –
FWIW,第一個例子可以更簡單地寫成'wrapperFunction(){「$ @」; }'。推測將參數放入數組的原因是在調用封裝函數之前允許進行某種操作或檢查;這可能值得更加明確。另外,注意在這種包裝器中注入可執行文件,特別是如果它們在不安全的環境中運行。 'eval'不是唯一的安全漏洞,儘管它可能是最糟糕的。 – rici
您傳入多個參數,然後使用這些參數執行程序。這與試圖將多個參數放入一個字符串中相反,將它們解釋爲shell代碼而不是參數,希望能夠完整地取回參數。如果你熟悉C,它基本上是'int main(..,char * argv){execve(argv [0],argv,..); }而不是'system(argv [1])'。 –