Usando o launchd para encerrar e reiniciar o Finder no OS X

Usando o launchd para encerrar e reiniciar o Finder no OS X

Estou tentando usar um agente de inicialização no login para encerrar o Finder e, em seguida, reiniciarTotal Finder, para aplicar automaticamente o mod colorsidebar para OS X 10.7 (o mod pode ser encontradoaqui).

Se eu usar o launchagent para chamar um script de shell, tudo bem, assim:

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

E então, no shell script, tudo que eu uso é

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

killall Finder
Open /Applications/TotalFinder.app

Agora, quando tento combinar os dois assim

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

Não funciona e o console mostra o seguinte erro:

21/08/11 17:16:16.957 PM com.colorsidebar.root: /bin/bash: killall Finder: Esse arquivo ou diretório não existe

Responder1

bashespera receber um nome de arquivo (ou seja, um script) como argumento. Como não existe um arquivo chamado "killall Finder", você recebe um erro nesse sentido. Se você quiser passar comandos para o bash como argumentos, você deve usar a -copção e passar os comandos como um único argumento:

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

informação relacionada