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

如何编写Bash别名实现命令与输出一键复制到剪贴板?

实现Bash命令+输出一键复制到剪贴板

你的需求完全可行,问题出在变量展开时未保留换行格式,以及输出打印的处理逻辑上。下面是修复后的完整实现:

copyclip() {
    # 获取最后一条命令,移除行号和末尾的管道调用(如 | copyclip)
    cmd=$(history 1 | sed -E 's/^ *[0-9]+ *//; s/ *\| *copyclip$//')
    # 从标准输入读取完整输出,保留所有换行与空白字符
    output=$(cat)
    # 格式化命令与输出,确保格式完整后传入剪贴板
    printf '$ %s\n%s\n' "$cmd" "$output" | xclip -selection clipboard
    # 原样输出内容到终端,方便即时查看
    printf '%s\n' "$output"
}

为什么之前的代码失效?

  • 未给变量加双引号:echo $output这类写法会让Bash把所有换行、连续空白替换成单个空格,直接丢失换行格式
  • echo的行为不稳定:不同系统下echo对转义字符的处理有差异,用printf能精准控制输出格式
  • 命令截取不严谨:原代码的sed规则未完全适配命令末尾的管道空格,修复后的正则能更可靠地提取原命令

使用方式

执行目标命令后通过管道调用该函数即可:

ls | copyclip

剪贴板最终内容会和预期一致:

$ ls
Desktop Documents Downloads

额外注意事项

  • 确保系统已安装xclip(Debian/Ubuntu可通过sudo apt install xclip安装)
  • 若使用zsh,history输出格式略有不同,需微调sed正则表达式,但Bash环境下上述代码直接可用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 12:42:42