2013-11-14 2 views
2

Я написал сценарий, чтобы добавить общие сетевые ресурсы пользователей в список «подключиться к серверам» в Mac OS X (Finder -> Go -> Connect to Server ...). Этот скрипт записывается непосредственно в резервную копию com.apple.sidebarlists.plist, а затем заменяет его после проверки с помощью mv. У меня возникли проблемы с поиском Finder, чтобы узнать, что изменения были внесены в этот plist. Перезагрузка системы отображает новые серверы в списке просто отлично. Однако logout/login и reaunching (kill) Finder нет. Я также пробовал killall SystemUIServer и killall cfprefsd (http://blog.designed79.co.uk/?p=1761) без везения.Force Finder распознает обновленный plist?

Кто-нибудь сталкивался с этим и есть ли решение, чтобы получить список для обновления без перезагрузки?

Спасибо!

Вот часть моего скрипта, который пишет/перемещает/etc для справки.

# ... 
    cp "$enduserhomefolder/Library/Preferences/com.apple.sidebarlists.plist" "$enduserhomefolder/Library/Preferences/com.apple.sidebarlists.mod.plist" 
    if [[ "$?" != 0 ]]; then 
     echo "$(date):ERROR: The users com.apple.sidebarlists.plist could not be backed up. Aborting...." 
     exitfunction 
    else 
     echo "$(date): com.apple.sidebarlists.plist was backed up." 
    fi 

    defaults delete "$enduserhomefolder/Library/Preferences/com.apple.sidebarlists.mod.plist" favoriteservers 
    if [[ "$?" != 0 ]]; then 
     echo "$(date):ERROR: Could not remove favoriteservers from com.apple.sidebarlists.mod.plist. Aborting...." 
     exitfunction 
    else 
     echo "$(date): Favoriteservers was removed from com.apple.sidebarlists.plist." 
    fi 

    defaults write "$enduserhomefolder/Library/Preferences/com.apple.sidebarlists.mod.plist" favoriteservers -dict Controller CustomListItems CustomListItems REPLACEME 
    if [[ "$?" != 0 ]]; then 
     echo "$(date):ERROR: Could not add favoriteservers to com.apple.sidebarlists.mod.plist. Aborting...." 
     exitfunction 
    else 
     echo "$(date): Favoriteservers was re-added to com.apple.sidebarlists.plist with placeholder." 
    fi 

    plutil -convert xml1 "$enduserhomefolder/Library/Preferences/com.apple.sidebarlists.mod.plist" 
    if [[ "$?" != 0 ]]; then 
     echo "$(date):ERROR: Could not convert com.apple.sidebarlists.mod.plist to XML1 format. Aborting...." 
     exitfunction 
    else 
     echo "$(date): com.apple.sidebarlists.mod.plist was successfully converted to XML1." 
    fi 

    sed -i "" "/ *<string>REPLACEME<\/string>/r $tempfile5" "$enduserhomefolder/Library/Preferences/com.apple.sidebarlists.mod.plist" 

    if [[ "$?" != 0 ]]; then 
     echo "$(date):ERROR: Could not inject new server list. Aborting...." 
     exitfunction 
    else 
     echo "$(date): New server list was injected into com.apple.sidebarlists.mod.plist." 
    fi 

    sed -i "" 's/ *<string>REPLACEME<\/string>//g' "$enduserhomefolder/Library/Preferences/com.apple.sidebarlists.mod.plist" 
    if [[ "$?" != 0 ]]; then 
     echo "$(date):ERROR: Could not remove placeholder tag in com.apple.sidebarlists.mod.plist. Aborting...." 
     exitfunction 
    else 
     echo "$(date): Placeholder tag was removed from com.apple.sidebarlists.mod.plist." 
    fi 

    plutil -convert binary1 "$enduserhomefolder/Library/Preferences/com.apple.sidebarlists.mod.plist" 
    if [[ "$?" != 0 ]]; then 
     echo "$(date):ERROR: Could not convert com.apple.sidebarlists.mod.plist into binary format. Aborting...." 
     exitfunction 
    else 
     echo "$(date):com.apple.sidebarlists.mod.plist was successfully converted into binary1." 
    fi 

    plutil -lint "$enduserhomefolder/Library/Preferences/com.apple.sidebarlists.mod.plist" 
    if [[ "$?" != 0 ]]; then 
     echo "$(date):ERROR: Could not validate com.apple.sidebarlists.mod.plist. Aborting...." 
     exitfunction 
    else 
     echo "$(date):com.apple.sidebarlists.mod.plist was successfully verified as a valid XML file." 
    fi 

    mv "$enduserhomefolder/Library/Preferences/com.apple.sidebarlists.plist" "$enduserhomefolder/Library/Preferences/com.apple.sidebarlists.plist.old" 
    if [[ "$?" != 0 ]]; then 
     echo "$(date):ERROR: com.apple.sidebarlists.plist could not be moved. Aborting...." 
     exitfunction 
    else 
     echo "$(date):com.apple.sidebarlists.mod.plist was successfully renamed to com.apple.sidebarlists.plist.old." 
    fi 

    mv "$enduserhomefolder/Library/Preferences/com.apple.sidebarlists.mod.plist" "$enduserhomefolder/Library/Preferences/com.apple.sidebarlists.plist" 
    if [[ "$?" != 0 ]]; then 
     echo "$(date):ERROR: apple.sidebar.mod.plist could not be moved. Aborting...." 
     mv "$enduserhomefolder/Library/Preferences/com.apple.sidebarlists.plist.old" "$enduserhomefolder/Library/Preferences/com.apple.sidebarlists.plist" 
     echo "$(date):ERROR: com.apple.sidebarlists.plist plist restored from backup" 
     exitfunction 
    else 
     echo "$(date):com.apple.sidebarlists.mod.plist was successfully renamed to com.apple.sidebarlists.plist.old." 
    fi 

# .... 

ответ

1

Вы, очевидно, уже знаете о команде defaults. Итак, почему вы используете его как способ манипулирования файлами pls-файлов предпочтений? Вы не должны этого делать. Используйте команду defaults так, как она должна использоваться, чтобы просто изменить настройки в кэшированной базе данных и дать cfprefsd записать обновленный кеш в файл на досуге.

defaults write com.apple.sidebarlists favoriteservers -dict-add CustomListItems '({ Name = "whatever"; URL = "smb://server.example.com"; })' 

Это значит, что Finder по-прежнему не заберет изменения немедленно, но после его перезапуска. Достаточно сделать killall -HUP Finder или что-то в этом роде. (Это, вероятно, просто убить Finder и в этот момент он будет автоматически перезапущен.) Кроме того, можно сделать что-то вроде:

osascript -e 'tell app "Finder" to quit' 
sleep 1 
osascript -e 'tell app "Finder" to launch' 

заметь, только делать это с разрешения пользователя. Убийство Finder, когда пользователь этого не ожидает, будет очень грубым и может потерять данные.

0

Вы можете попробовать удалить кэш после изменения влияют и до возобновления Finder:

~/Library/Caches/com.apple.finder 
Смежные вопросы