Mac-Osx

啟動 plist 字元替換

  • May 17, 2017

我有 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

&lt;key&gt;ProgramArguments&lt;/key&gt;
   &lt;array&gt;
       &lt;string&gt;/bin/bash&lt;/string&gt;
       &lt;string&gt;-c&lt;/string&gt;
       &lt;string&gt;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&lt;/string&gt;
   &lt;/array&gt;

請注意,由於它是通過 傳遞給 shell 的-c,因此整個命令(包括參數)必須作為由空格分隔的單個長參數傳遞,而不是作為單獨的參數傳遞。另外,我補充說exec,shell 將用 java 執行檔替換自己,而不是作為(無用的)父程序掛起。

引用自:https://serverfault.com/questions/849752