В процессе копаний с сервисами мне попался на глаза plist com.apple.recentitems.plist, в котором хранятся последние 10 хостов, приложений, документов и серверов.

Решил сделать команду, которая выдаст 10 последних запущенных приложений, разделённых знаком ‘#’.

Использовал две программы – plutil (работа с plist) и xpath (perl-интерфейс для xml/xslt). Не уверен, есть ли они в базовом Mac OS X, но с установленным XCode точно есть.

Команда мозгодробительная:

$ plutil -convert xml1 -o - ~/Library/Preferences/com.apple.recentitems.plist | \
  xpath '/plist/dict/key[text()="RecentApplications"]/following-sibling::*[1]/array/dict/string' | \
  sed -e 's/<string>//g' -e 's/<\/string>/#/g'

Но сил на убирание “– NODE — ” уже не осталось, поэтому косметические изыски оставляю вам.

Вот, например, мои последние запущенные программы:

Mailplane#LittleSnapper#Woopra#fseventer#PlistEdit Pro#
Speed Download#PListChecker#TextEdit#Archive Utility#TextMate#

Для экспериментов c XPath можно использовать программу AquaPath, только сначала нужно преобразовать бинарный plist в xml:

$ plutil -convert xml1 -o - ~/Library/Preferences/com.apple.recentitems.plist > 1.xml

А потом скормить полученный xml в программу и написать правила XPath:

Context Node: /plist/dict
XPath: key[text()="RecentApplications"]/following-sibling::*[1]/array/dict/string