2016-11-14 43 views
1

我編寫了一個腳本,列出了機器上安裝的所有軟件包,然後將它與位於/tmp/pacotes_iniciais.log中的另一個列表進行比較。出於某種原因,輸出的語言有時會發生變化。它交替英語和葡萄牙語。shell腳本輸出中的語言正在改變

我第一次運行該腳本,它輸出Mon(星期一),但在第二次運行日期爲Seg,這是身材矮小的乙級(星期一葡萄牙語)。

此外,英文時,單詞在14º字符處切割。

這是有問題的,因爲totaly會使比較無效。

下面是腳本的摘錄創建列表並進行比較:

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 OS上運行這個腳本,並通過SSH訪問這臺機器。

+0

使用'dpkg --get -selections | cut -f1' –

+0

@IporSircer這個命令會做什麼? – EGS

+0

man dpkg:'--get-selections [package-name-pattern ...] 獲取軟件包選擇列表,並將其寫入標準輸出。如果沒有 模式,則不會顯示未安裝的軟件包(即之前已被清除的那些軟件包)。 –

回答

1

從信息頁面date

援引「日期」,沒有format參數等效於依賴於「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