Como copiar o stdout de um comando para a área de transferência em uma instalação padrão do Ubuntu?

1

Eu encontrei este pergunta, e achei muito interessante.

Enquanto pesquisava sobre isso, descobri que uma solução já havia sido postada aqui em AskUbuntu , mais várias vezes em StackOverflow e em Unix & Linux , mas todas as soluções fornecidas envolveram o uso de xclip ou xsel , que são não está disponível em uma instalação Ubuntu padrão (ou seja, eles não estão presentes em um DVD ao vivo, por exemplo).

Pergunta: Como copiar o stdout de um comando para a área de transferência em uma instalação padrão do Ubuntu?

    
por kos 17.03.2015 / 10:09

1 resposta

2

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 exemplo

    pwd | 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

  1. crie um arquivo (log) vazio, terminal_log.txt
  2. Copie o script abaixo em um arquivo vazio. Na seção head, defina o caminho para terminal_log.txt , salve-o como read_output.py
  3. Inicie o script com o comando

    python /path/to/read_output.py
    
  4. Execute em (another) terminal seu comando, seguido por:

    | tee /path/to/terminal_log.txt

  5. 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

    
por Jacob Vlijm 20.03.2015 / 16:51