在 OS X 中使用 launchd 终止并重新启动 Finder

在 OS X 中使用 launchd 终止并重新启动 Finder

我尝试在登录时使用启动代理来关闭 Finder,然后重新启动总搜索器,自动应用 OS X 10.7 的 colorsidebar mod(该 mod 可以在这里)。

如果我使用 launchagent 来调用 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.colorsidebar.root</string>
    <key>KeepAlive</key>
    <false/>
    <key>RunAtLoad</key>
    <true/>
    <key>ProgramArguments</key>
    <array>
        <string>/POSIX/path/to/some/shell/script.sh</string>
    </array>
</dict>
</plist>

然后在 shell 脚本中我使用的就是

#!/bin/bash
#
#This file kills the finder on user session start
#and re-launches TotalFinder
#

killall Finder
Open /Applications/TotalFinder.app

现在,当我尝试将两者结合起来时

<?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.colorsidebar.root</string>
    <key>KeepAlive</key>
    <false/>
    <key>RunAtLoad</key>
    <true/>
    <key>ProgramArguments</key>
    <array>
        <string>/bin/bash</string>
        <string>killall Finder</string>
        <string>open /Applications/TotalFinder.app</string>
    </array>
</dict>
</plist>

它不起作用,控制台显示以下错误:

2011-08-21 下午 5:16:16.957 com.colorsidebar.root: /bin/bash: killall Finder: 没有该文件或目录

答案1

bash期望将文件名(即脚本)作为其参数。由于没有名为“killall Finder”的文件,因此您会收到错误。如果您想将命令作为参数传递给 bash,则必须使用该-c选项,并将命令作为单个参数传递:

<key>ProgramArguments</key>
<array>
    <string>/bin/bash</string>
    <string>-c</string>
    <string>killall Finder; open /Applications/TotalFinder.app</string>
</array>

相关内容