2016-02-29 173 views
0

我有一個plist文件,應該在啓動時啓動一個shell腳本。Mac運行shell腳本啓動

<?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"> 
<dict> 
    <key>Label</key> 
    <string>com.app.localclient</string> 
    <key>Program</key> 
    <string>~/Documents/Local_client/Server.sh</string> 
    <key>RunAtLoad</key> 
    <true/> 
    <key>KeepAlive</key> 
    <true/> 
</dict> 
</plist> 

我已經保存plist文件爲com.app.localclient.plist,並測試了shell腳本,工作正常。當我嘗試使用launchctl load com.app.localclient.plist加載腳本時,它會加載plist,但不會啓動shell腳本。我也將程序參數~更改爲/Users/username/,但沒有成功。有沒有辦法讓plist啓動shell腳本,並且可以在不知道腳本保存位置的用戶名的情況下完成該操作(所以在路徑中使用〜)。

+0

你有沒有到位的'〜''試過$ HOME'?另外,你在哪裏存儲這個文件? –

+0

我剛剛嘗試$ HOME,並提供以下錯誤:程序/ ProgramArguments無效或缺少。我將.plist文件保存在〜/ Library/LaunchAgents中。 – SPD

回答

0

也許嘗試運行shell作爲會知道你的$ HOME:

<key>ProgramArguments</key> 
<array> 
    <string>bash</string> 
    <string>-c</string> 
    <string>"$HOME/Documents/Local_client/Server.sh"</string> 
</array> 

爲了調試這一點,請嘗試:

<key>ProgramArguments</key> 
<array> 
    <string>bash</string> 
    <string>-c</string> 
    <string>"echo hi > /tmp/DEBUG.txt"</string> 
</array> 

,看看是否/tmp/DEBUG.txt之後存在。如果這樣的作品,請嘗試將最後一個字符串

"/usr/bin/whoami > /tmp/DEBUG.txt" 

,然後看看有什麼是/tmp/DEBUG.txt

+0

我再也沒有遇到任何錯誤,plist文件被加載,但是不幸的是shell腳本仍然沒有運行。 – SPD

+0

嘗試使測試的權限非常慷慨 - 您可以隨時關閉它們。另外,嘗試運行一個簡單的'回聲「嗨,我跑」>/tmp/a'作爲第一次嘗試,然後嘗試'回聲「嗨,我跑」> /用戶/你/桌面/ yes.txt「 –

+0

所以我試了第一個簡單例子。 plist文件再次加載沒有錯誤,但腳本不會執行。如果我只是運行該腳本,然後它執行正常,並在終端打印「你好我跑了」。我已經將腳本放在root,用戶和家中,但都沒有成功。 – SPD