Как скопировать стандартный вывод команды в буфер обмена при установке 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
Как настроить
- создать пустой (log-) файл,
terminal_log.txt
- Скопируйте приведенный ниже скрипт в пустой файл. В разделе заголовка установите путь к
terminal_log.txt
сохранить какread_output.py
Запустите скрипт командой
python /path/to/read_output.py
Запустите в (другом) терминале вашу команду, а затем:
| tee /path/to/terminal_log.txt
Вывод вашей команды копируется в буфер обмена
Если вы используете его часто, вы можете запустить его в качестве запускаемого приложения.
Сценарий
#!/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)
как объяснено здесь