Copie a saída padrão para a área de transferência sem instalar software adicional
Embora parecesse impossível para mim (e é um pouco de um desvio), é muito bem possível sem software adicional. A única coisa necessária é python
, como se fosse instalado a partir de uma nova instalação.
Essa solução usa a capacidade de python
de copiar texto para a área de transferência e disponibilizá-lo para outros aplicativos, conforme explicado (ao) aqui .
A construção
- O primeiro passo é criar um arquivo de texto vazio, digamos
terminal_log.txt
-
O (s) comando (s) executado (s) no terminal é seguido por
| tee /path/to/terminal_log.txt
, por exemplopwd | tee /path/to/terminal_log.txt
A saída estará no terminal, assim como gravada em
terminal_log.txt
- Enquanto isso, um script (veja abaixo) é executado em segundo plano, detectando alterações no arquivo
- Se o arquivo for alterado, a alteração será copiada para a área de transferência
O resultado do exemplo acima:
pwd | tee /path/to/terminal_log.txt
Se eu abrir gedit
e pressionar Ctrl + V
/home/jacob/Desktop
Como configurar
- crie um arquivo (log) vazio,
terminal_log.txt
- Copie o script abaixo em um arquivo vazio. Na seção head, defina o caminho para
terminal_log.txt
, salve-o comoread_output.py
-
Inicie o script com o comando
python /path/to/read_output.py
-
Execute em (another) terminal seu comando, seguido por:
| tee /path/to/terminal_log.txt
-
A saída do seu comando é copiada para a área de transferência
Se você o usa com frequência, pode executá-lo como um aplicativo de inicialização.
O script
#!/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
Informações adicionais
command | tee /path/to/terminal_log.txt
Não copiará stderr
na área de transferência. Para copiar os stdout
e stderr
para a área de transferência, use:
command > >(tee /path/to/terminal_log.txt) 2> >(tee /path/to/terminal_log.txt >&2)
conforme explicado aqui