Linux命令-xclip(命令行 X11 剪贴板操作)

📅 2026/8/24 4:39:17
Linux命令-xclip(命令行 X11 剪贴板操作)
Linux命令-xclip命令行 X11 剪贴板操作 简介 语法⚙️ 选项 示例示例 1基本读写——管道到剪贴板和从剪贴板输出示例 2开发工作流加速示例 3自动化脚本——邮件和凭证处理示例 4HTML 和富文本剪贴板操作示例 5vim 和编辑器集成⚠️ 注意 相关命令 总结快速参考xclip是命令行访问 X11 剪贴板的工具可以将命令输出复制到剪贴板或将剪贴板内容输出到文件。它是 Shell 脚本与剪贴板交互的桥梁大幅提升命令行工作效率。有了xclip你可以用管道将任何命令输出直接送入系统剪贴板。cat file.txt | xclip -selection clipboard等价于 CtrlA → CtrlC。 简介X Window 系统维护三个独立的选择Selection每个有不同的用途和粘贴方式选择名称缓冲区粘贴方式典型用途PRIMARY主选择鼠标中键Linux 传统的选中即复制CLIPBOARD剪贴板CtrlV / 右键粘贴现代应用的剪贴板操作SECONDARY次选择不常用特殊应用场景xclip可以读写这三个选择中的任意一个。默认操作 PRIMARY与大多数 Linux 用户的习惯一致配合-selection clipboard操作 CtrlV 剪贴板。安装方式# Debian/Ubuntu$sudoapt-getinstallxclip# RHEL/CentOS 7需 EPEL 仓库$sudoyuminstallepel-release $sudoyuminstallxclip# RHEL/CentOS 8 / Fedora$sudodnfinstallxclip# Arch Linux$sudopacman-Sxclip# 验证安装$ xclip-versionxclip version0.13 语法xclip[选项][文件]如果不指定文件从标准输入stdin读取数据输入模式-i是默认行为输出模式-o将选择内容写入标准输出stdout⚙️ 选项选项说明-selection 选择名指定操作的选择primary默认、clipboard、secondary-i输入模式将数据写入选择默认-o输出模式将选择内容输出到 stdout-f过滤器模式同时读取 stdin 和写入选择一直在后台运行-t 类型指定目标数据类型如text/plain、image/png、text/html-l 数量当提供 X 个选择请求时退出-loops 数量同-l为兼容性保留-r使用 RM 选择较少使用-quiet静默模式仅输出错误信息-verbose详细输出模式-display 显示器指定 X 显示器默认$DISPLAY快捷别名配置# 在 ~/.bashrc 或 ~/.zshrc 中添加强烈推荐aliaspbcopyxclip -selection clipboardaliaspbpastexclip -selection clipboard -o# 重新加载配置$source~/.bashrc 示例示例 1基本读写——管道到剪贴板和从剪贴板输出# 写入剪贴板复制# 将命令输出复制到 PRIMARY鼠标中键粘贴$echoHello from command line|xclip# 现在点击鼠标中键即可粘贴 Hello from command line# 将命令输出复制到 CLIPBOARDCtrlV 粘贴$echoHello, CtrlV!|xclip-selectionclipboard# 复制文件内容到剪贴板$ xclip-selectionclipboard/etc/hosts# 复制当前日期$date|xclip-selectionclipboard# 复制命令输出同时保留换行$ls-la|xclip-selectionclipboard# 复制 SSH 公钥最常用的场景之一$ xclip-selectionclipboard~/.ssh/id_ed25519.pub# 读取剪贴板粘贴# 从 PRIMARY 读取$ xclip-oHello fromcommandline# 从 CLIPBOARD 读取$ xclip-o-selectionclipboard Hello, CtrlV!# 读取到文件$ xclip-o-selectionclipboardclipboard_content.txt# 读取并直接处理$ xclip-o-selectionclipboard|wc-l15# 读取并执行危险仅信任来源时使用$ xclip-o-selectionclipboard|bash示例 2开发工作流加速# 日常开发场景 # 复制 Git 最新提交的 hash$gitlog-1--format%H|xclip-selectionclipboard# 直接去 GitHub/GitLab 粘贴使用# 复制当前分支名$gitbranch --show-current|xclip-selectionclipboard# 复制文件差异diff用于 Code Review$gitdiffHEAD~1|xclip-selectionclipboard# 复制 IP 地址$hostname-I|awk{print $1}|xclip-selectionclipboard# 复制文件路径绝对路径$ readlink-fimportant_config.json|xclip-selectionclipboard# 复制目录中所有文件名$ls|xclip-selectionclipboard# 复制带行号的文件内容$cat-nscript.sh|xclip-selectionclipboard# 复制 base64 编码内容$ base64 image.png|xclip-selectionclipboard# 复制 JSON 美化后的输出$catdata.json|python3-mjson.tool|xclip-selectionclipboard# 预期效果以上命令执行后直接在浏览器/编辑器/聊天工具中 CtrlV 粘贴示例 3自动化脚本——邮件和凭证处理#!/bin/bash# 通过剪贴板自动化处理日常任务# 场景一快速生成并复制随机密码 generate_password(){localLENGTH${1:-16}# 生成安全随机密码并复制到剪贴板openssl rand-base6448|tr-dcA-Za-z0-9!#$%^*|head-c$LENGTH|xclip-selectionclipboardecho✅${LENGTH}位随机密码已复制到剪贴板}# 场景二复制 Markdown 格式链接 copy_md_link(){localURL$1localTITLE$2echo[${TITLE}](${URL})|xclip-selectionclipboardecho✅ Markdown 链接已复制: [${TITLE}](${URL})}# 场景三备份剪贴板历史 clipboard_snapshot(){localSNAPSHOT_DIR$HOME/clipboard_snapshotsmkdir-p$SNAPSHOT_DIRlocalFILENAME${SNAPSHOT_DIR}/clipboard_$(date%Y%m%d_%H%M%S).txtxclip-o-selectionclipboard$FILENAME2/dev/nullif[-s$FILENAME];thenecho✅ 剪贴板内容已保存到:$FILENAMEelseecho⚠️ 剪贴板为空rm-f$FILENAMEfi}# 场景四监视剪贴板变化 watch_clipboard(){echo监视剪贴板变化CtrlC 退出...localLASTwhiletrue;doCURRENT$(xclip-o-selectionclipboard2/dev/null)if[$CURRENT!$LAST][-n$CURRENT];thenTIMESTAMP$(date%H:%M:%S)echo[$TIMESTAMP] 剪贴板更新 (${#CURRENT}字符):echo$CURRENT|head-3echo---LAST$CURRENTfisleep1done}# 场景五多剪贴板管理器 clipboard_store(){localSLOT$1localSTORE_DIR$HOME/.clipboard_storemkdir-p$STORE_DIRcase${SLOT:-list}insave)xclip-o-selectionclipboard$STORE_DIR/slot_$22/dev/nullecho✅ 剪贴板已存储到槽位$2;;load)if[-f$STORE_DIR/slot_$2];thenxclip-selectionclipboard$STORE_DIR/slot_$2echo✅ 槽位$2已加载到剪贴板elseecho⚠️ 槽位$2为空fi;;list)echo已存储的剪贴板槽位:ls-la$STORE_DIR/slot_*2/dev/null||echo (空);;clear)rm-f$STORE_DIR/slot_*echo✅ 所有槽位已清空;;*)echo用法: clipboard_store {save|load|list|clear} [槽位号];;esac}# 使用示例# generate_password 20 → 生成 20 位密码并复制# copy_md_link https://github.com/user/repo My Project# clipboard_snapshot → 保存当前剪贴板内容# watch_clipboard → 实时监控剪贴板变化# clipboard_store save 1 → 保存当前内容到槽位1# clipboard_store load 1 → 加载槽位1到剪贴板示例 4HTML 和富文本剪贴板操作# xclip 可以处理多种 MIME 类型不仅仅是纯文本# 复制 HTML 格式内容粘贴到富文本编辑器可保留格式$echob粗体文本/b i斜体/i|xclip-selectionclipboard-ttext/html# 复制图片文件到剪贴板需要目标类型支持$ xclip-selectionclipboard-timage/pngscreenshot.png2/dev/null# 注意并非所有应用都支持从 xclip 粘贴图片# 复制带颜色的终端输出需要先在终端复制 ANSI 转义文本$echo-e\e[31m红色文字\e[0m|xclip-selectionclipboard# 从浏览器复制的内容检查 MIME 类型$ xclip-o-selectionclipboard-tTARGETS TARGETS text/html text/plain text/uri-list# 显示剪贴板中可用的数据类型# 分别读取纯文本和 HTML 版本$ xclip-o-selectionclipboard-ttext/plain $ xclip-o-selectionclipboard-ttext/html示例 5vim 和编辑器集成# vim 中使用系统剪贴板 # 在 vim 中粘贴系统剪贴板内容# p 或 *p# 在 vim 中复制到系统剪贴板# y 或 *y# 如果 vim 不支持剪贴板vim --version | grep clipboard 显示 -clipboard# 使用 xclip 作为变通方案# vim 映射选择内容后按 Ctrlc 复制到系统剪贴板# 在 ~/.vimrc 中添加cat~/.vimrcVIMRC 使用 xclip 复制到系统剪贴板 vnoremap C-c :w !xclip -selection clipboardCRCR 对应的粘贴使用 xclip -o nnoremap C-v :r !xclip -o -selection clipboardCR VIMRC# tmux 中使用剪贴板 # 在 ~/.tmux.conf 中添加cat~/.tmux.confTMUX # tmux 复制模式同步到系统剪贴板 bind -T copy-mode-vi y send-keys -X copy-pipe-and-cancel xclip -selection clipboard TMUX# Nano 编辑器 # Nano 不支持直接访问系统剪贴板需要在两个终端间切换# 终端 1: cat file.txt | xclip -selection clipboard# 终端 2: 在 Nano 中 CtrlShiftV 粘贴终端模拟器功能⚠️ 注意PRIMARY vs CLIPBOARD 的困惑Linux 有两个剪贴板的概念常常让新用户困惑# PRIMARY主选择选中文本即自动复制# 选择一段文字 → 移动光标到目标位置 → 鼠标中键粘贴# CLIPBOARD剪贴板显式复制/粘贴# CtrlC 复制 → CtrlV 粘贴# xclip 默认操作 PRIMARY$echoPRIMARY test|xclip# 鼠标中键粘贴 PRIMARY testCtrlV 不会出现# 指定 CLIPBOARD$echoCLIPBOARD test|xclip-selectionclipboard# CtrlV 粘贴 CLIPBOARD test鼠标中键不会出现重要注意事项xclip 需要 X 服务器运行在纯 Wayland 环境无 XWayland中不可用需使用wl-clipboardwl-copy/wl-paste。远程 SSH 需要 X11 Forwardingssh -X连接后才能使用 xclip。剪贴板只在 X 会话生命周期内存在注销后剪贴板内容清空。通过管道读取文件不会在退出后保持剪贴板xclip退出时如果使用了-f以外的模式剪贴板内容会随进程结束而丢失。如需持久保持使用-f前台运行或配合剪贴板管理器如clipit、parcellite。# 保持剪贴板内容xclip 持续运行直到手动关闭$echo持久内容|xclip-selectionclipboard-f# 现在即使 xclip 进程在后台内容也会保持# 关闭方法kill %1 或 fg 后 CtrlC 相关命令命令说明xsel另一个 X 剪贴板工具功能类似部分场景更灵活wl-copy/wl-pasteWayland 剪贴板工具替代 xclipclipit/parcellite剪贴板管理器历史记录、持久化xdotoolX 自动化工具可模拟键盘 CtrlCgreenclipHaskell 编写的剪贴板管理器 总结xclip是命令行与图形界面的桥梁工具将流水线哲学延伸到剪贴板操作管道友好command | xclip将任何输出送入剪贴板双剪贴板支持PRIMARY鼠标中键和 CLIPBOARDCtrlV独立操作脚本集成密码生成、日志复制、自动化部署等场景的核心工具编辑器增强弥补 vim/tmux 等工具与系统剪贴板的鸿沟配置alias pbcopyxclip -selection clipboard和alias pbpastexclip -selection clipboard -o后命令行剪贴板操作如同 macOS 一样自然。这是每个 Linux 命令行用户应该安装的第一批工具之一。