Como posso copiar a saída de um comando remoto para a área de transferência local?

6

Eu uso iTerm2 como meu cliente de terminal no Mac OS X. No sistema local, posso usar pbcopy e pbpaste para transferir dados entre a área de transferência do sistema e o terminal, mas é claro que isso não funciona quando você está ssh'ed para outra máquina.

Existe alguma maneira que eu possa pegar o resultado de um comando e copiá-lo para a área de transferência automaticamente? Talvez um applescript para pegar o texto na janela iTerm , então pegar a próxima a última linha?

Por exemplo, se eu quisesse copiar o diretório de trabalho atual:

Corro pwd , depois uso o mouse para selecionar o texto e, em seguida, pressiono command + c .

Existe alguma maneira melhor / mais rápida / automática de fazer isso? Eu não estou procurando uma solução à prova de balas que funcione para cada comando (por exemplo: pode não funcionar quando há uma grande rolagem) - Estou apenas procurando por algo para fazer essa tarefa que eu faço com bastante frequência um pouco menos tediosa.

Atualizar

Estou procurando usar screen para fazer isso, mas ainda não tenho certeza se é possível.

    
por cwd 27.03.2012 / 22:39

2 respostas

2

Bem, eu tentei isso e funciona:

echo "foo" | tee | ssh [email protected] pbcopy

Notas:

  • Estou usando echo "foo" como um substituto para o comando cuja saída você deseja copiar para sua máquina ssh client.
  • Estou usando tee para que você possa vê-lo em sua janela de terminal, em vez de engoli-lo com o comando ssh .
  • Ao atribuir ssh um comando para executar, ele enviará o stdin que ssh recebido para esse comando nesse outro host e, em seguida, retornará imediatamente.

Você provavelmente poderia usar alias para algo mais simples de digitar. E certifique-se de usar ssh keys em vez de autenticação baseada em senha para evitar ter que redigitar sua senha. Atualização: E você pode usar o Encaminhamento de SSH para agentes para que você não use t tem que colocar credenciais para acessar sua máquina local na caixa remota.

(NB: Não tenho certeza de quão bem o pbcopy / pbpaste funciona quando você tem apenas uma sessão ssh / tty / shell e nenhum contexto GUI do Mac OS X. Eu acho que o pasteboard é um NeXTStep / Cocoa / Aqua / GUI conceito, não necessariamente algo que sai na camada Unix sem a camada GUI.)

Quando eu apareci com isso, parecia hackish, mas quanto mais eu brinco com isso, mais eu gosto.

    
por 27.03.2012 / 23:41
0

Solução simplista

Em seu ssh remote.host, crie /usr/local/bin/spbcopy :

#!/bin/bash
cat >$HOME/.pastebin

Em você, OSX cria /usr/local/bin/spbpaste :

#!/bin/bash
ssh $* 'cat .pastebin; >$_'

Copiar dados para a área de transferência usando:

[email protected]$ echo "foo" | spbcopy

E cole dados da área de transferência usando:

osx$ spbpaste [email protected]

Provavelmente você pode usar o pipe nomeado no host remoto e fazer com que os dados sejam copiados para a área de transferência local automaticamente executando algum comando em segundo plano, mas isso torna a configuração mais complexa.

    
por 08.02.2016 / 09:32