我有一個C程序(DHCPD)在Fedora 15上運行;它使用on commit
語句(該語句使用exec
命令)來調用腳本。當所有區域設置文件(例如i18n)設置爲en_GB.utf8
時,腳本的$LANG
變量始終設置爲en_US.UTF-8
。Fedora 15語言環境沒有正確設置
有趣的是,當腳本從shell提示符下運行時,$LANG
變量設置爲en_GB.utf8
- 如何從DHCPD程序調用時如何使用en_GB.utf8
?
我有一個C程序(DHCPD)在Fedora 15上運行;它使用on commit
語句(該語句使用exec
命令)來調用腳本。當所有區域設置文件(例如i18n)設置爲en_GB.utf8
時,腳本的$LANG
變量始終設置爲en_US.UTF-8
。Fedora 15語言環境沒有正確設置
有趣的是,當腳本從shell提示符下運行時,$LANG
變量設置爲en_GB.utf8
- 如何從DHCPD程序調用時如何使用en_GB.utf8
?
那麼首先要做的是檢查/etc/sysconfig/i18n
並查看LANG
設置爲什麼。
Fedora 15將使用systemd
來啓動像dhcpd
這樣的服務,它將忽略用戶環境並給每個守護進程啓動一個乾淨的環境。它確實需要從/etc/sysconfig/i18n
進行設置,但守護進程應該使用此處指定的設置運行。
如果這似乎是正確的,看看/proc/NNN/environ
其中NNN是您的dhcpd進程的PID,看看LANG
設置爲什麼。請注意,此文件是原始環境,因此每個字符串之間都有一個二進制nul。
如果這是您所期望的,那麼最有可能的答案是dhcpd
在調用配置文件中指定的腳本之前故意清理環境。
嗨;感謝這一點,environ文件只有PATH條目。如果dhcpd正在清理環境,那麼肯定它必須使用系統文件來重置它? – user1087598
在這種情況下,你應該給它添加'LANG =「en_GB.utf8」',或者安裝'system-config-language'並運行它,它會爲你設置它。 – TomH
是的,我是他們兩個 - 將en_GB.utf8添加到i18n並運行了system-config-language程序 - 仍然以en_US.UTF-8的形式出現! – user1087598
dhcpd正在重置環境,或者傳遞給dhcpd的環境是這樣設置的。 –
我不明白他的評論'或傳遞給dhcpd的環境是這樣設置的' - 如果環境被傳遞,那麼肯定它應該使用環境文件? – user1087598
爲什麼在啓動守護程序時會使用環境文件?可能會跳過那些表現。 –