我编写了一个脚本,列出了计算机上安装的所有软件包,然后将其与/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访问此计算机。
答案 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
其他问题很可能也是由于语言环境设置造成的。因此,以类似的方式调整其余的语言环境变量。 LANG
和LC_NUMERIC
变量尤为重要。查看信息页面:info bash LANG
。