Как скопировать стандартный вывод команды в буфер обмена при установке 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)
как объяснено здесь