altera a localidade no script

3

Eu fiz um script que faz algumas contas, usando bc e printf .

Funcionou bem sob cygwin , que locale é en_US.UTF-8 , mas quando eu o executo no linux, cujo código de idioma é en_ES.UTF-8 , ele falha porque usa , como separador decimal. Por exemplo, a próxima expressão falha:

avg=$(printf %.2f $(echo "scale=4; $val1/$val2" | bc -l )) 

Eu encontrei uma solução. Preceda o script por LC_ALL=C.UTF8 :

LC_ALL=C.UTF8 ./script.sh [OPTIONS] 

No entanto, acho que seria melhor não fazer isso.
Então, minha pergunta: Existe uma maneira de alterar o código de idioma somente dentro do script, para evitar esse tipo de problema, independentemente do código de idioma definido no perfil do usuário?

    
por Albert 03.02.2016 / 12:22

1 resposta

6

Dentro do script, simplesmente export LC_ALL=C.UTF-8 no começo (logo após a linha shebang, se houver).

(Para o Cygwin, você pode precisar de export LC_ALL=c.utf8 ).

Em seguida, todos os comandos executados pelo script herdarão LC_ALL .

Se você precisar de parte do seu script para ficar imune às alterações de localidade, mas para respeitar a localidade (por exemplo, se você calcular e imprimir alguns valores), talvez seja necessário unset LC_ALL após o cálculo e antes da impressão. Como alternativa, você pode optar por prefixar apenas alguns comandos em seu script com uma configuração por comando.

    
por 03.02.2016 / 12:43

Tags