Obtenha comandos de uma linha do SSH para mostrar a cor

6

Gostaria de ativar a saída de texto colorido nos comandos one-liner do SSH, mas parece que não consigo fazê-lo funcionar no OS X, no Ubuntu 14.10 ou no OpenSUSE 12.2.

Se eu ssh em um servidor e digito, digamos, ls --color=auto no prompt, ele funciona muito bem, mostrando diretórios, links simbólicos e arquivos regulares em cores diferentes, no entanto, se eu colocar o comando em um ssh one- liner no mesmo sistema: ssh user@host "ls --color=auto" , a saída não é colorida.

Digitar echo $TERM me dá xterm-256color , quer eu coloque ou não em uma declaração de uma linha.

Isto é principalmente para erros de codificação por cor e avisos em compilações remotas, mas seria bom ativá-lo para tudo.

Algum conselho?

    
por Adam Naber 29.10.2014 / 18:46

2 respostas

10
ssh user@host "ls --color=auto"

ls somente exibe cores quando está gravando em um terminal. Quando você especifica um comando para que ssh seja executado no host remoto, o ssh não aloca um TTY (interface de terminal) por padrão. Então, quando você executa o comando acima, o ssh não aloca um terminal no sistema remoto, ele vê que ele não está gravando em um terminal e não produz cores.

Você pode executar ssh com a opção -t para alocar um terminal. O seguinte deve imprimir cores:

ssh -t user@host "ls --color=auto"

Se ssh estiver sendo executado de forma não interativa e sua própria saída local não estiver indo para um terminal, ela ignorará um único -t sinalizador. Nesse caso, você pode especificar -t mais de uma vez para forçar o ssh a alocar um TTY no sistema remoto:

ssh -tt user@host "ls --color=auto"
    
por 29.10.2014 / 20:00
0

Sugiro usar --color=always no caso de ls para forçar a cor. E para ter cores em outros aplicativos, isso suporta coloração, mas não suporta --color=value , você também pode tentar ssh <host> -t "TERM=${TERM} <command>"

    
por 31.10.2014 / 15:29