使用 Bash 脚本自定义 macOS 的 Dock

Posted

技术标签:

【中文标题】使用 Bash 脚本自定义 macOS 的 Dock【英文标题】:Customize macOS's Dock with a Bash script 【发布时间】:2021-04-09 18:18:31 【问题描述】:

我想使用 Bash 脚本(不带 AppleScript)自定义 macOS 的 Dock。

目前我有代码(取自this answer并修改):

#!/bin/bash

defaults delete com.apple.dock persistent-apps

dock_item() 
    printf '<dict><key>tile-data</key><dict><key>file-data</key><dict><key>_CFURLString</key><string>%s</string><key>_CFURLStringType</key><integer>0</integer></dict></dict></dict>', "$1"


defaults write com.apple.dock persistent-apps -array \
    "$(dock_item /Applications/iTerm.app)" \
    "$(dock_item /Applications/Visual\ Studio\ Code.app)" \
    "$(dock_item /Applications/Slack.app)" \
    "$(dock_item /Applications/Google\ Chrome.app)" \
    "$(dock_item /System/Applications/Utilities/Screenshot.app)"

killall Dock

这会改变默认的 Dock:

收件人:

但我还希望它删除垃圾箱旁边的“下载”文件夹以及在 Dock 中保留/保存的正在运行的应用程序的垂直线(在这种情况下只有 iTerm)之间出现的重复图标(到垂直线的左侧)。像这样:


此外,在进行更改后,代码更新 Dock 的方式是杀死 Dock 进程,然后自动重新启动。我觉得应该有一种更快的方法来做到这一点,它不会使 Dock 下降,然后桌面变黑一会儿,打开任何最小化的应用程序,然后使 Dock 上升(recording)。

【问题讨论】:

printf 格式字符串参数中的逗号将逐字包含在输出中,即使它在引号之外。 shell 脚本中的参数分隔符只是任何(未加引号的、未转义的)水平空格。引用通常是可选的(ls . 完全等同于 'ls' '.')。 @tripleee 谢谢你的建议。 【参考方案1】:

比较 defaults read com.apple.dock 在手动从 Dock 中删除图标之前和之后打印的内容后,我注意到我只需要删除 recent-apps(对于重复的图标)和 persistent-others(对于文件夹)键以及:

defaults delete com.apple.dock recent-apps
defaults delete com.apple.dock persistent-others

【讨论】:

以上是关于使用 Bash 脚本自定义 macOS 的 Dock的主要内容,如果未能解决你的问题,请参考以下文章

Linux,Unix,MacOS等其中的Bash脚本判别调用者使用者的身份

Bash脚本在任何地方启动自定义Groovy脚本

图展 - 显示Linux, MacOS, Unix系统信息的bash脚本

拦截 bash 脚本函数/系统调用并将它们包装到自定义函数中

sh Bash | ubuntu的自定义配置脚本

将 Zulu 时间戳转换为自纪元以来的秒数,并将其与 bash 脚本 Mac 中的当前时间进行比较