我知道您可以使用
export LANG=xx_XX.UTF8
在特定区域设置下运行程序,但 Linux/Ubuntu 中的区域设置也具有“格式”选项。
有没有办法在特定locale
和formats
(分别为 en_US 和 en_GB)下运行应用程序以进行测试,而不影响系统设置?
后续问题:如何转储特定进程正在运行的所有 ENV 变量/设置?
答案1
有没有办法在特定的语言环境和格式(分别为 en_US 和 en_GB)下运行应用程序以进行测试,而不会影响系统设置?
是的,您可以在程序名称/命令之前在命令行上设置环境变量,LANG
例如gedit
:
LANG=en_US.UTF-8 gedit
...并且将专门为该特定程序(即gedit
在特定会话/运行期间)设置该环境变量...但是,所选语言应该同时受该特定程序支持且为该特定程序安装,才能使其正常工作。
但是,其他本地/区域格式可以单独明确设置,每个格式都有自己特定的环境变量,例如LC_MEASUREMENT
,,, ...等,您可以根据需要以相同的方式设置任意数量的环境变量,例如:LC_TIME
LC_NUMERIC
LC_MONETARY
LANG=en_US.UTF-8 LC_MEASUREMENT=en_GB.UTF-8 LC_NUMERIC=en_GB.UTF-8 gedit
如何转储特定进程正在运行的所有 ENV 变量/设置?
假设当前正在运行的进程... 也就是实际正在运行的进程的ID在/proc/PID/environ
哪里。PID
以gedit
示例程序为例,这些可以被转储(在 Bash 中)例如这样:
(gedit & disown) &>/dev/null; cat /proc/$(pgrep 'gedit')/environ
...然而,那些是 NUL /零分隔的条目,为了可读性,您可能希望将它们解析为单独的行,例如通过管道将输出传输到xargs
如下位置:
(gedit & disown) &>/dev/null; cat /proc/$(pgrep 'gedit')/environ |
xargs -0 -n1
注意虽然大多数命令行程序都会遵守所有明确设置的命令行区域环境变量和全局环境变量,但 GUI 程序并非如此......简单的 GUI 程序和 DE 附带的程序(例如 Gnome 应用程序)很可能会同样遵守这些环境变量,但更复杂/独立的程序(例如 Web 浏览器)很可能会有自己的内部配置文件,这些文件设置在其 UI 内部,并将忽略外部重复的环境设置并接受未在内部设置的其他设置......
举例来说,FireFox 网络浏览器只接受在 UI 中的首选项菜单中设置用户界面语言,并将其保存为一个名为的条目,intl.locale.requested
该条目看起来像user_pref("intl.locale.requested", "en-US,ar");
并且保存在prefs.js
活动配置文件目录内名为的文件中,即对于 SNAP 版本,例如~/snap/firefox/common/.mozilla/firefox/0qag4e79.default/prefs.js
... 因此,LANG
或LANGUAGE
区域设置环境变量将被忽略,无论是全局设置还是在命令行上明确设置... 但是,其他区域设置相关的环境变量如LC_MEASUREMENT
、LC_TIME
和LC_NUMERIC
仍然LC_MONETARY
被尊重(在两种情况下)直到现在,所以如果您愿意,您可以在命令行上明确设置这些变量并期望它们在适用时也反映在/proc/PID/environ
并生效。