2016-02-29 219 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