Como lidar com variáveis retornadas pelo Expect - removendo CR do fim de linha
O Expect é uma ferramenta que trabalha com a interação shell-usuário (pretendo explicar com
mais detalhes em um artigo). É uma ferramenta sensacional, mas logo que comecei a trabalhar com ela me
deparei com o seguinte problema:
A codificação do expect retorna dois caracteres de fim de linha: <CR> e <LF>, sendo assim eu
não consegui fazer comparações com as variáveis. Por exemplo:
valor=`expect script.exp`
echo $valor
>>5
O script retornou o valor 5.
if [ `echo $valor` == "5" ];then
echo igual
else
echo diferente
fi
>>diferente
Tive que usar o `echo $valor`, pois o retorno é em texto e não em valor numérico. Mesmo a variável
$valor estando igual a 5, o if não consegue comparar corretamente.
A solução encontrada para isso foi remover o caractere <CR> do fim da linha com o TR:
if [ `echo $valor | tr -d '\r' ` == "5" ];then
echo igual
else
echo diferente
fi
>>igual
Essa foi a ideia que tive para fazer funcionar, que serviu para o Expect, mas que pode servir para outros
casos. Se alguém teve algum caso semelhante, com uma resolução diferente, podem postar aí.
Abraço.
Outras dicas deste autor
Entendendo o FHS
Diferenças entre os compactadores gzip, bzip2 e xz
Leitura recomendada
Controle e Automação
Variável de numero inteiro ou float
Exportar variáveis de um script no mesmo sub-shell
Somar variáveis nos shells BASH e sh
Números aleatórios em shell script
Comentários
Nenhum comentário foi encontrado.