重新加载com.apple.Terminal.plist文件

6
我希望使用一个脚本来修改我的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个回答

10
在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

1
这个方法可行,但我必须使用完整路径defaults read ~/Library/Preferences/com.apple.Terminal.plist,而不是仅使用defaults read com.apple.Terminal - YPCrumble

3
"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分钟(至少)。现在启动终端,您会发现设置已更改。

3
我的改进方案在OS X Mavericks中运行(也可以)。
在示例中,我为终端添加了一个新的ssh连接的PermanentServer:-p 22 www.example.com -l user -L 33306:localhost:3306 1. 关闭终端应用程序。 2. 在Xcode中打开plist文件并编辑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/

2

对我来说,这听起来像是一个经典的鸡生蛋问题。

终端在退出时会写出其当前的偏好设置,并覆盖您所做的任何更改,但您需要加载终端才能使用PlistBuddy进行更改。

我能想到两个解决方案:

1)编写一个小脚本,可以从非终端过程启动...也许是一个AppleScript或者你可以从一个小型Macintosh应用程序传递到system调用中的东西? :-)

2)通过进入终端首选项,简单地更改“设置”为您所需的内容。


1
我已经在 xterm 中运行了脚本,现在它可以工作了。非常感谢你。 - owenwater
3
好的,我会尽力进行翻译。你希望解决这个问题,我的建议是:在脚本运行结束后,关闭所有终端进程。由于终端无法正常退出,所以它没有机会写入 .plist 文件。请注意,我已经将原文的意思保持不变,并尽可能使翻译更通俗易懂。 - owenwater

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接