Как скопировать стандартный вывод команды в буфер обмена при установке Ubuntu по умолчанию?

Я столкнулся с этим вопросом и нашел его довольно интересным.

Исследуя это, я обнаружил, что решение уже было опубликовано здесь AskUbuntuплюс несколько раз StackOverflow и на Unix & Linux, но все предоставленные решения включали использование xclip или же xsel, которые не доступны по умолчанию 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. создать пустой (log-) файл, terminal_log.txt
  2. Скопируйте приведенный ниже скрипт в пустой файл. В разделе заголовка установите путь к 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 в буфер обмена. Чтобы скопировать оба stdout а также stderr в буфер обмена используйте:

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

как объяснено здесь

Другие вопросы по тегам