Перезагрузить com.apple.Terminal.plist

Я хочу использовать скрипт для изменения настроек моего терминала для моего Mac, чтобы он мог закрыть окно при выходе из терминала. Я использую эту команду в сценарии:

/usr/libexec/PlistBuddy -c "Set \"Window Settings\":Basic:shellExitAction 0" ~/Library/Preferences/com.apple.Terminal.plist

Теперь проблема в том, что после выполнения скрипта файл.plist изменился, я проверяю его

defaults read com.apple.Terminal "Window Settings"

Значение 0 сейчас.

Но проблема в том, что терминал не перезагружает файл.plist, и когда я выхожу из терминала, он снова переписывает файл.plist как "2". Поэтому мой вопрос заключается в том, как позволить терминалу перезагрузить файл.plist, когда он работает, или остановить его, переписать файл при выходе.

4 ответа

Решение

Для меня это звучит как классическая проблема с курицей и яйцом.

Терминал записывает свои текущие предпочтения при выходе и перезаписывает любые ваши изменения, однако вам необходимо загрузить Терминал, чтобы иметь оболочку для внесения этих изменений с помощью PlistBuddy.

Я могу придумать два решения здесь:

1) написать небольшой скрипт, который вы можете запустить из нетерминального процесса... может быть, Applescript или что-то, что вы можете передать в system звонить из крошечного Macintosh-приложения?:-)

2) просто измените "Настройки" на то, что вы хотите, перейдя в настройки терминала.

В 10.9 (Mavericks) предпочтения кэшируются. Перезаписав свои настройки из терминала, вы должны прочитать их

defaults read com.apple.Terminal

а затем выйдите и перезапустите терминал.

У меня есть настройки терминала на моем сервере, поэтому полная команда, которую я использую на новом компьютере или в новом профиле:

curl -o ~/Library/Preferences/com.apple.Terminal.plist  http://example.com/xyz/com.apple.Terminal.plist.`sw_vers \
| grep 'ProductVersion:' \
| grep -o '10\.[0-9]*'` \
&& defaults read com.apple.Terminal

Команда "at" может выполнить команду в будущем.

$ at now + 1 minute
/usr/libexec/PlistBuddy -c "Set \"Window Settings\":Basic:shellExitAction 0" ~/Library/Preferences/com.apple.Terminal.plist
^D          <<< press CTRL-D
job 3 at Mon Apr 24 15:34:00 2017
$ exit

Теперь выйдите из всех терминалов. Подождите 1 минуту (как минимум). Теперь запустите терминал, и вы увидите, что настройки были изменены.

Мое адаптированное решение работает в OS X Mavericks (тоже).

В Примере я добавляю новый PermanentServer для подключения ssh в Терминале -p 22 www.example.com -l user -L 33306:localhost:3306

  1. Закройте терминал-приложение
  2. Откройте plist-файл в Xcode и отредактируйте настройку PermanentServer (скопируйте и вставьте строку выше)

    open ~/Library/Preferences/com.apple.Terminal.plist

  3. Сохраните и закройте plist-файл
  4. Откройте Applescript-App и скопируйте / вставьте / запустите следующий код:

    do shell script "defaults read ~/Library/Preferences/com.apple.Terminal.plist"

  5. Откройте Terminal-App и нажмите SHIFT+CMD+K и посмотрите в список серверов

Спасибо за этот совет здесь: http://www.cnet.com/how-to/how-to-manually-edit-defaults-plist-files-in-mavericks/

Другие вопросы по тегам