Como posso canalizar algo para menos sobre o ssh?

6

Estou tentando configurar uma ligação mutt para canalizar um email para uma chamada ssh para processar o email em uma máquina remota com um script que exibe alguma saída usando less . No entanto, isso não funciona, porque less me fornece toda a saída sem paginação.

Tentando restringi-lo, o que estou essencialmente tentando emular é:

seq 1 100 | less

mas com less em execução na máquina remota. (Devido ao meu caso de uso de chamar o script em mutt, a seq 1 100 part (representando o email) não pode ser executada na máquina remota, nem a less part (representando o script com menos) é executada na máquina local. )

Se eu fizer:

seq 1 100 | ssh -t REMOTE_MACHINE less

Eu recebo o aviso "O pseudo-terminal não será alocado porque o stdin não é um terminal." e less exibe a saída diretamente sem fazer qualquer paginação.

Se eu fizer:

seq 1 100 | ssh -t -t REMOTE_MACHINE less

less falha com "Nome do arquivo ausente (" menos - ajuda "para ajuda)", então eu acho que sua entrada está perdida.

Eu também tentei adicionar zsh -ic , sem efeito. Qual é a invocação de ssh correta para que less no host remoto possa ler sua entrada padrão e fazer a paginação normalmente?

Editar para tentar responder ao comentário de Gilles abaixo: O problema também ocorre se a invocação less nos exemplos acima for substituída por um script real. Se eu criar um arquivo executável script.sh contendo:

#!/bin/bash

exec less

e eu coloco isso em minha casa na máquina local e remota, então os seguintes trabalhos:

seq 1 100 | ~/script.sh

mas o seguinte não (com -t ou -t -t ou nenhum):

seq 1 100 | ssh REMOTE_MACHINE less
    
por a3nm 09.12.2016 / 15:11

1 resposta

6

Você pode passar o comando como um argumento e usar -t para forçar a alocação pseudo-terminal.

Por exemplo, se o comando seq precisar ser executado no servidor remoto:

ssh $REMOTE_HOST -t 'seq 1 100 | less'

Se o comando seq precisar ser executado na máquina local, você poderá usar um comando semelhante usando a sequência de caracteres sequencial <<< (é claro que a cotação se torna um pouco difícil):

ssh $REMOTE_HOST -t "less <<< \"$(seq 1 100)\""
    
por 09.12.2016 / 15:59