OS X で launchd を使用して Finder を終了して再起動する

OS X で launchd を使用して Finder を終了して再起動する

ログイン時に起動エージェントを使用してFinderを終了し、再起動しようとしていますトータルファインダー、OS X 10.7用のcolorsidebar modを自動的に適用します(modはここ)。

起動エージェントを使用してシェル スクリプトを呼び出す場合は、次のようにすれば問題ありません。

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

さて、このように2つを組み合わせようとすると

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

関連情報