使用dockutil脚本配置Dock异常:App Store与~/Documents无法添加求助
我之前也碰到过几乎一模一样的问题!直接在终端敲命令没问题,但放进shell脚本就失效,大概率是路径解析或者执行环境的锅,咱们一步步来排查解决:
1. 先检查路径是否正确
关于Documents
脚本里的~/Documents很可能没被正确解析——如果脚本是用sudo执行,或者在非当前用户的环境下运行,~会指向执行脚本的用户(比如root)的家目录,而不是你登录的用户。
解决方法:把~/Documents换成$HOME/Documents,或者直接写绝对路径(比如/Users/你的用户名/Documents)。注意如果路径放在引号里,~不会被shell自动展开,$HOME才会,所以脚本里一定要用$HOME代替~。
关于App Store
很多人会把App Store的路径写错!正确的路径是/Applications/App Store.app(注意中间的空格),如果脚本里写成/Applications/AppStore.app或者只写App Store,dockutil就找不到对应的应用。必须写完整的绝对路径,别漏了空格和.app后缀。
2. 确认脚本的执行用户
如果你的脚本是用sudo或者其他用户身份运行的,dockutil会修改那个用户的Dock配置,而不是你当前登录用户的——这就导致你在桌面看不到变化,但实际上修改已经生效在另一个用户的Dock里了。
解决方法:让脚本以当前登录用户的身份执行dockutil命令。可以用下面的方式获取当前登录用户,再切换身份执行:
# 获取当前登录的用户名 CURRENT_USER=$(stat -f "%Su" /dev/console) # 切换到当前用户执行dockutil命令 su - $CURRENT_USER -c ' # 这里放你的dockutil命令 dockutil --add "/Applications/App Store.app" dockutil --add "$HOME/Documents" # ...其他你的dock配置命令 '
3. 别忘了重启Dock生效
有时候脚本执行完dockutil命令后,Dock的缓存没刷新,导致修改不显示。直接在终端执行命令时,系统可能自动触发了缓存更新,但脚本里需要手动加一句重启Dock的命令:
killall Dock
完整示例脚本
把这些点整合起来,你的脚本大概应该是这样:
#!/bin/bash # 获取当前登录用户 CURRENT_USER=$(stat -f "%Su" /dev/console) # 以当前用户身份配置Dock su - $CURRENT_USER -c ' # 添加正常的项 dockutil --add "/System/Applications/System Preferences.app" dockutil --add "/Applications/Safari.app" dockutil --add "/Applications/TextEdit.app" dockutil --add "/Applications" dockutil --add "$HOME/Downloads" # 修复App Store和Documents的添加 dockutil --add "/Applications/App Store.app" dockutil --add "$HOME/Documents" # 重启Dock让修改生效 killall Dock '
你可以先单独在脚本里测试App Store和Documents的命令,确认路径和用户环境没问题,再整合其他配置。
内容的提问来源于stack exchange,提问作者Solcà Enrico

