如何在默认的 Ubuntu 安装中将命令的标准输出复制到剪贴板?

如何在默认的 Ubuntu 安装中将命令的标准输出复制到剪贴板?

我遇到了问题,我发现它非常有趣。

在研究这个问题的时候,我发现已经有人发布了解决方案这里在 上AskUbuntu,加上多次在 上StackOverflow和 在 上Unix & Linux,但提供的所有解决方案都涉及使用xclipxsel,它们在默认安装中不可用Ubuntu(例如,它们不存在于 Live DVD 中)。

问题:如何在默认的 Ubuntu 安装中将命令的标准输出复制到剪贴板?

答案1

无需安装其他软件即可将标准输出复制到剪贴板

虽然一开始我觉得这似乎是不可能的(而且有点绕弯子),但它完全可以做到,无需额外的软件。唯一需要的是python,就像从全新安装一样。

该解决方案利用了python将文本复制到剪贴板的功能,并使其可供其他应用程序使用,如下所述 (ao)这里

那个工程

  • 第一步是创建一个空的文本文件,假设terminal_log.txt
  • 终端中运行的命令后跟| tee /path/to/terminal_log.txt,例如

    pwd | tee /path/to/terminal_log.txt
    

    输出将在终端中,并写入terminal_log.txt

  • 同时,脚本(见下文)在后台运行,检测文件的更改
  • 如果文件发生更改,更改将被复制到剪贴板

上面例子的结果:

pwd | tee /path/to/terminal_log.txt

如果我打开gedit并按Ctrl+V

/home/jacob/Desktop

如何设置

  1. 创建一个空的(日志)文件,terminal_log.txt
  2. 将下面的脚本复制到一个空文件中。在 head 部分,将路径设置为terminal_log.txt,另存为read_output.py
  3. 使用命令启动脚本

    python /path/to/read_output.py
    
  4. 在(另一个)终端中运行您的命令,然后:

    | tee /path/to/terminal_log.txt

  5. 命令的输出被复制到剪贴板

如果您经常使用它,您可以将其作为启动应用程序运行。

剧本

#!/usr/bin/env python
import pygtk
pygtk.require('2.0')
import gtk
import time

#--- enter the path to the log file below
f = "/path/to/terminal_log.txt"
#---

output1 = open(f).read().strip()

while True:
    time.sleep(1)
    output2 = open(f).read().strip()
    if output1 != output2:
        tx = output2.replace(output1, "")
        clipboard = gtk.clipboard_get()
        clipboard.set_text(tx)
        clipboard.store()
    output1 = output2



附加信息

command | tee /path/to/terminal_log.txt

不会复制stderr到剪贴板。要将和复制stdoutstderr剪贴板,请使用:

command > >(tee /path/to/terminal_log.txt) 2> >(tee /path/to/terminal_log.txt >&2)

正如解释的那样这里

相关内容