Использование launchd для завершения и перезапуска Finder в OS X

Использование launchd для завершения и перезапуска Finder в OS X

Я пытаюсь использовать launchagent при входе в систему, чтобы закрыть Finder, а затем перезапуститьTotalFinder, чтобы автоматически применить мод colorsidebar для OS X 10.7 (мод можно найтиздесь).

Если я использую launchagent для вызова скрипта оболочки, то все в порядке, например так:

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

И затем в скрипте оболочки я использую только

#!/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>

Это не работает, и консоль показывает следующую ошибку:

8/21/11 5:16:16.957 PM 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>

Связанный контент