You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修正dockutil脚本中因应用名含not导致的Dock项判断误判

解决dockutil检测Dock应用存在性的误判问题

问题背景

刚接触dockutil工具,需要编写脚本实现以下逻辑:检查指定应用是否存在于Dock中,不存在则添加,已存在则不执行任何操作。

目前使用dockutil --find Keynote命令做检查,当应用不存在时,命令输出如下:

Keynote was not found in Keynote was not found in /Users/$UserName/Library/Preferences/com.apple.dock.plist

现有脚本通过提取输出中的"not"字符串做判断,但如果目标应用名称包含"not"(比如应用名为"NoteApp"),会导致误判,无法正确识别应用是否存在。现有脚本如下:

app='Keynote'
echo "${app}"

Test=$(dockutil --find "${app}" | tr ' ' '\n'| grep "not")

if [[ ${Test} == "not" ]]; then
  echo " its not there "
else
  echo "its there"
fi

修正方案

方案1:利用dockutil的退出码(推荐)

dockutil --find命令本身会返回明确的退出码:

  • 应用存在时,退出码为0
  • 应用不存在时,退出码为非0(通常是1)

直接通过退出码判断,无需解析输出,完全避免应用名称带来的误判。修正后的脚本:

app='Keynote'

# 静默执行find命令,丢弃所有输出
if dockutil --find "${app}" > /dev/null 2>&1; then
    echo "${app} 已存在于Dock中"
else
    echo "${app} 不在Dock中,开始添加..."
    # 替换为你的应用实际路径
    dockutil --add "/Applications/${app}.app"
    # 添加后重启Dock使更改生效
    killall Dock
fi

方案2:匹配完整的"not found"短语

如果一定要通过解析输出来判断,可以匹配完整的"not found"短语,而不是单独的"not",避免应用名称中的"not"干扰。脚本示例:

app='Keynote'

# 获取命令输出
output=$(dockutil --find "${app}")

# 静默匹配"not found"短语
if echo "${output}" | grep -q "not found"; then
    echo "${app} 不在Dock中,开始添加..."
    dockutil --add "/Applications/${app}.app"
    killall Dock
else
    echo "${app} 已存在于Dock中"
fi

内容的提问来源于stack exchange,提问作者Albert Chan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 10:19:59