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

为什么xdotool命令在命令行可运行,在bash脚本中却无效果

问题根本原因

你脚本中的mupdf命令默认是前台阻塞执行的,Shell 会等待 mupdf 进程完全退出后,才会执行后续的sleep和xdotool相关命令,此时mupdf窗口已经被关闭,xdotool自然找不到目标窗口,也就不会有任何效果。

修复方案

  1. 给mupdf命令末尾添加&符号,将其放到后台运行,这样Shell启动mupdf后会立刻执行后续逻辑,不需要等待进程退出。
  2. 可以移除无用的eval语句,硬编码的sleep也可以替换为循环等待窗口加载的逻辑,适配不同机器的启动速度,避免窗口还没加载完就执行xdotool命令。

修正后的完整函数代码如下:

joc(){ # Joy of Cooking, joc [page #, def 823]
  # 末尾加&将mupdf放到后台运行
  mupdf "$HD/ReadBooks/Rombauer/Rombauer-JoyOfCooking_11_823.pdf" "${1:-823}" &
  # 循环等待mupdf窗口加载完成,比硬编码sleep更可靠
  until xdotool search --class mupdf > /dev/null 2>&1
  do
    sleep 0.1
  done
  xdotool search --class mupdf windowactivate --sync type "f]H"
}

可选排查点

如果修改后仍存在问题,可按以下步骤排查:

  • 手动执行xdotool search --class mupdf,确认返回了mupdf的窗口ID,部分版本的mupdf窗口类名可能存在差异,可通过xprop命令点选mupdf窗口查看实际类名
  • 确认当前用户有权限操作目标窗口,权限不足时xdotool会静默失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:45:01