如何在Linux/mac下通过bash/zsh实现剪贴板复制后自动执行脚本?
监听剪贴板变化并触发脚本(Linux/macOS)
bash 和 zsh 本身没有内置的系统级剪贴板监听钩子——它们的钩子(比如 precmd、preexec)只针对shell内部的命令执行场景,没法捕捉系统剪贴板的变化。要实现复制后自动触发脚本,得靠外部工具配合shell脚本完成。
macOS 实现方案
方案1:循环轮询(简单易实现)
利用系统自带的 pbpaste 命令读取剪贴板内容,写个后台脚本对比每次的内容变化,有更新就触发处理逻辑:
#!/bin/zsh LAST_CONTENT="" while true; do CURRENT_CONTENT=$(pbpaste) if [[ "$CURRENT_CONTENT" != "$LAST_CONTENT" ]]; then LAST_CONTENT="$CURRENT_CONTENT" # 替换成你的处理脚本路径,& 让脚本后台运行 /path/to/your/handler.sh "$CURRENT_CONTENT" & fi sleep 0.5 # 可调整轮询间隔,越小响应越快,CPU占用越高 done
给脚本加执行权限:chmod +x clipboard-monitor.zsh,然后后台启动:./clipboard-monitor.zsh &。如果要开机自动运行,可把脚本加到「用户与群组」的登录项里。
方案2:用fswatch监听剪贴板配置文件(更高效)
macOS的剪贴板状态存在 ~/Library/Preferences/com.apple.pasteboard.plist,用 fswatch 监听这个文件的变化,避免轮询:
#!/bin/zsh # 先安装fswatch:brew install fswatch fswatch -o ~/Library/Preferences/com.apple.pasteboard.plist | while read -r; do CURRENT_CONTENT=$(pbpaste) /path/to/your/handler.sh "$CURRENT_CONTENT" & done
Linux 实现方案
Linux的剪贴板工具因桌面环境而异,通用方案用 xclip,高效方案可搭配 clipnotify。
方案1:循环轮询(通用兼容)
先安装 xclip:
- Debian/Ubuntu:
sudo apt install xclip - Fedora/RHEL:
sudo dnf install xclip
脚本如下:
#!/bin/bash LAST_CONTENT="" while true; do CURRENT_CONTENT=$(xclip -o -selection clipboard) if [[ "$CURRENT_CONTENT" != "$LAST_CONTENT" ]]; then LAST_CONTENT="$CURRENT_CONTENT" /path/to/your/handler.sh "$CURRENT_CONTENT" & fi sleep 0.5 done
后台启动脚本即可,同样可加到开机启动项(比如 ~/.bashrc/~/.zshrc 末尾,或者用systemd服务)。
方案2:用clipnotify监听(低资源占用)
clipnotify 是轻量级的X11剪贴板变化通知工具,比轮询更高效。先编译安装(以Debian为例):
sudo apt install libx11-dev libxfixes-dev git clone https://github.com/cdown/clipnotify.git cd clipnotify make sudo cp clipnotify /usr/local/bin/
然后写监听脚本:
#!/bin/bash while clipnotify; do CURRENT_CONTENT=$(xclip -o -selection clipboard) /path/to/your/handler.sh "$CURRENT_CONTENT" & done
内容的提问来源于stack exchange,提问作者rxyz
相关产品推荐
相关产品推荐

