shell脚本输出中的语言正在发生变化

时间:2016-11-14 13:23:23

标签: linux bash shell

我编写了一个脚本,列出了计算机上安装的所有软件包,然后将其与/tmp/pacotes_iniciais.log中的另一个列表进行比较。出于某种原因,输出语言有时会发生变化。它在英语和葡萄牙语之间交替。

我第一次运行脚本时,会输出Mon(星期一),但在第二次运行中,日期为Seg,这是 Segunda 的小号(星期一用葡萄牙语。)

另外,在英语中,单词会以14º字符切割。

这是有问题的,因为完全取消了比较。

以下是创建列表并执行比较的脚本的摘录:

dpkg -l | awk '{print $2}' >> /tmp/lista_pacotes.log

echo "\nPackages added until" $(date) "\n" >> /tmp/diferencas.log

grep -F -x -v -f /tmp/pacotes_iniciais.log /tmp/lista_pacotes.log >> /tmp/diferencas.log

/tmp/diferencas.log

的内容

第二轮:

Packages added until Seg Nov 14 08:48:22 BRT 2016 

sl

首先运行:

Packages added until Mon Nov 14 08:24:17 BRT 2016 

Name
acpi-support-b
apt-listchange
aptitude-commo
aptitude-doc-e
bash-completio
ca-certificate
console-setup-

[...]

导致这种情况的原因是什么?

注意:我在64位Debian Jessie操作系统上运行此脚本,并通过SSH访问此计算机。

1 个答案:

答案 0 :(得分:1)

来自date的信息页面:

  

调用没有FORMAT参数的'date'相当于调用   它的默认格式取决于“LC_TIME”语言环境   类别。

<强>实施例

LC_TIME=en_US.UTF-8 date
LC_TIME=ru_RU.UTF-8 date

示例输出

Mon Nov 14 20:27:59 +07 2016
Пн ноя 14 20:28:04 +07 2016

因此,您描述的行为是由您的语言环境设置引起的,即LC_TIME环境变量。在运行脚本之前(在目标机器上)调整它,例如:

export LC_TIME=C

其他问题很可能也是由于语言环境设置造成的。因此,以类似的方式调整其余的语言环境变量。 LANGLC_NUMERIC变量尤为重要。查看信息页面:info bash LANG