Mac-Osx
啟動 plist 字元替換
我有 LaunchAgent plist 文件,其中包含以下程序參數
<key>ProgramArguments</key> <array> <string>/Applications/UniFi.app/Contents/PlugIns/jre1.8.0_121.jre/Contents/Home/jre/bin/java</string> <string>-Djava.awt.headless=true</string> <string>-Xmx1024M</string> <string>-jar</string> <string>/Applications/UniFi.app/Contents/Resources/lib/ace.jar</string> <string>start</string> </array>
當來自 Ubiquiti 的人員更新他們的應用程序時,嵌入式 java 分發的初始路徑(在本例中為 jre1.8.0_121.jre)會發生變化,但他們提供的安裝不包括 LaunchAgent 修改,所以我必須這樣做每次都是手。
我試著把類似的東西
<string>/Applications/UniFi.app/Contents/PlugIns/jre*.jre/Contents/Home/jre/bin/java</string>
…但正如我在這裡所讀到的,plist 文件中沒有替換。
關於如何實現這一目標的任何想法?這樣,無論嵌入式發行版的更新版本如何,plist 文件都可以保持不變。
謝謝大家
我還沒有測試過,但你應該可以添加
<EnableGlobbing><true/>
到 plist 文件中,並使用萬用字元。從launchd.plist 手冊頁:EnableGlobbing <boolean>
此標誌使launchd在呼叫之前使用glob(3)機制更新程序參數。
由於這似乎不起作用,我想到的另一種可能性是執行一個 shell,並將其用於萬用字元擴展。您可以創建一個簡短的腳本,並啟動執行它,或者只使用
bash -c
:<key>ProgramArguments</key> <array> <string>/bin/bash</string> <string>-c</string> <string>exec /Applications/UniFi.app/Contents/PlugIns/jre*.jre/Contents/Home/jre/bin/java -Djava.awt.headless=true -Xmx1024M -jar /Applications/UniFi.app/Contents/Resources/lib/ace.jar start</string> </array>
請注意,由於它是通過 傳遞給 shell 的
-c
,因此整個命令(包括參數)必須作為由空格分隔的單個長參數傳遞,而不是作為單獨的參數傳遞。另外,我補充說exec
,shell 將用 java 執行檔替換自己,而不是作為(無用的)父程序掛起。