Debian
Debian Squeeze 區域設置
我對一個稍微定制的 Debian 映像有疑問,我正在嘗試對其進行一些無頭工作。問題是已安裝的語言環境列表已簡化為:
C en_GB en_GB.iso88591 en_GB.iso885915 en_GB.utf8 POSIX
但是,當我以 root 身份登錄(使用其他原版配置文件)時,我發現:
~# set | grep LC_ LC_CTYPE=en_US.UTF-8
這是唯一的 LC_ 環境變數集,大概這意味著它被顯式設置在某個地方(並且鑑於 /etc/default/locale 僅包含 LANG=en_GB,我看不到任何其他選擇)。但是,我看不到它的設置位置,而且它錯誤的事實阻止了例如 postgresql-8.4 的安裝。我知道我可以做一個
LC_CTYPE=en_GB apt-get install postgresql-8.4
解決這個問題,但我真的很想了解這個設置的來源,我真的不喜歡安裝一個原本不必要的語言環境來消除這個想法。那麼:這個 LC_CTYPE 設置是從哪裡來的,我該如何讓它消失呢?
為了以後參考,我發現了問題所在,與Bash無關。
問題是 sshd_config 有以下條目:
AcceptEnv LANG LC_*
這允許我的名為 LC_whatever 的本地環境變數(包括有問題的 LC_CTYPE)覆蓋遠端設置,因此,當我連接時,ssh 程序相應地設置其環境變數,並且 bash 程序盡職盡責地繼承它們。在此過程中,沒有檢查 LC_CTYPE 設置在 SSH 連接的遠端是否有效。
我的臨時解決方法是在我在遠端執行的特定命令中指定一個已知良好的 LC_CTYPE。我不知道對此的“正確”解決方案是什麼。