Os códigos de cores para echo não funcionam ao executar um script sobre o ssh

0

tudo.

Eu tenho o seguinte código de exemplo:

#!/bin/bash
echo "[3[01;32m  green  3[01;37m]"
echo "[3[01;31m  red  3[01;37m]"

Quando executo este script localmente, obtenho a cor de saída correta.

Mas se eu copiar para outro host através de scp e executá-lo com "ssh [email protected]" sudo sh color-test.sh "" o script imprimirá o código em vez da cor.

Devo ter alguma consideração ao executar o script remotamente?

    
por Msalvatori 07.08.2018 / 15:15

1 resposta

3

O comportamento de

echo '3'

Depende da implementação e / ou do ambiente.

Com implementações compatíveis com UNIX, ele exibe um caractere ESC seguido por NL, em alguns outros, ele gera 3 seguido por NL. Alguns suportam uma opção -e para que as sequências de escape 3 sejam expandidas.

Seu script tem #! /bin/bash she-bang, mas você está executando o script como sh the-script , por isso sh interpreta, não bash .

Na maioria dos sistemas, bash ' echo builtin não expande \x sequências por padrão. Isso só acontece quando a opção xpg_echo está habilitada ou usando a opção -e (a menos que as opções xpg_echo e posix tenham sido habilitadas).

Provavelmente, sua implementação sh local é compatível com UNIX a esse respeito (como dash ou bash compilado com a opção xpg_echo ativada por padrão), mas a que está no servidor remoto não é (como bash ).

Se você deseja um comportamento portátil e confiável, use printf :

printf '[[01;32m  green  [01;37m]\n'
printf '[[01;31m  red  [01;37m]\n'
    
por 07.08.2018 / 15:27