Я столкнулся с этим вопросом, и я нашел его довольно интересным.
Во время исследования этого я обнаружил, что решение было уже опубликовано здесь на AskUbuntu
, плюс несколько раз на StackOverflow
и на Unix & Linux
, но все предоставленные решения включали использовать xclip
или xsel
, которые недоступны при установке по умолчанию Ubuntu
(то есть, например, их нет в Live DVD).
Вопрос: Как скопировать стандартный вывод команды в буфер обмена при установке Ubuntu по умолчанию?
Хотя это казалось невозможным мне сначала (и это - что-то вроде обхода), это очень хорошо возможно без дополнительного программного обеспечения. Единственная необходимая вещь python
, как он установлен от новой установки.
Это решение использование python
способность скопировать текст в буфер обмена и сделать это доступным для других приложений, как объяснено (a.o). здесь.
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
terminal_log.txt
terminal_log.txt
, сохраните его как read_output.py
Запустите сценарий с команды
python /path/to/read_output.py
Выполненный в (другом) терминале Ваша команда, сопровождаемая:
| мишень /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)
как объяснено здесь