Verwenden von launchd zum Beenden und Neustarten des Finders in OS X

Verwenden von launchd zum Beenden und Neustarten des Finders in OS X

Ich versuche, beim Anmelden einen Launchagenten zu verwenden, um den Finder zu beenden und ihn dann neu zu startenTotalFinder, um den Colorsidebar-Mod für OS X 10.7 automatisch anzuwenden (der Mod ist zu finden unterHier).

Wenn ich den Launchagent verwende, um ein Shell-Skript aufzurufen, ist alles in Ordnung, und zwar so:

<?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>

Und dann verwende ich im Shell-Skript nur

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

killall Finder
Open /Applications/TotalFinder.app

Wenn ich nun versuche, die beiden so zu kombinieren,

<?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>

Es funktioniert nicht und die Konsole zeigt den folgenden Fehler an:

21.08.11 17:16:16.957 Uhr com.colorsidebar.root: /bin/bash: killall Finder: Keine solche Datei oder kein solches Verzeichnis

Antwort1

basherwartet als Argument einen Dateinamen (also ein Skript). Da es keine Datei mit dem Namen „killall Finder“ gibt, erhalten Sie eine entsprechende Fehlermeldung. Wenn Sie Befehle als Argumente an bash übergeben möchten, müssen Sie die -cOption verwenden und die Befehle als einzelnes Argument übergeben:

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

verwandte Informationen