Usando launchd para cerrar y reiniciar Finder en OS X

Usando launchd para cerrar y reiniciar Finder en OS X

Estoy intentando usar un agente de lanzamiento al iniciar sesión para cerrar el Finder y luego volver a iniciarlo.Buscador total, para aplicar automáticamente el mod colorsidebar para OS X 10.7 (el mod se puede encontraraquí).

Si uso el agente de lanzamiento para llamar a un script de shell, está bien, así:

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

Y luego, en el script de shell, todo lo que uso es

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

killall Finder
Open /Applications/TotalFinder.app

Ahora, cuando trato de combinar los dos así

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

No funciona y la consola muestra el siguiente error:

21/08/11 5:16:16.957 PM com.colorsidebar.root: /bin/bash: killall Finder: No existe tal archivo o directorio

Respuesta1

bashespera que se le dé un nombre de archivo (es decir, un script) como argumento. Como no hay ningún archivo llamado "killall Finder", recibirá un error en ese sentido. Si desea pasar comandos a bash como argumentos, debe usar la -copción y pasar los comandos como un único argumento:

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

información relacionada