Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何将LC_CTYPE设置为C?_Linux_Ubuntu_Locale - Fatal编程技术网

Linux 如何将LC_CTYPE设置为C?

Linux 如何将LC_CTYPE设置为C?,linux,ubuntu,locale,Linux,Ubuntu,Locale,我试图将LC\u CTYPE,LC\u COLLATE设置为C,同时将剩余的LC\u*设置为“en\u US.UTF-8”。我在Ubuntu 16.04虚拟机中工作。我目前的环境有: $ locale LANG=en_US.UTF-8 LANGUAGE=en_US LC_CTYPE="en_US.UTF-8" LC_NUMERIC="en_US.UTF-8" LC_TIME="en_US.UTF-8" LC_COLLATE="en_US.UTF-8" LC_MONETARY="en_US.UT

我试图将
LC\u CTYPE
LC\u COLLATE
设置为
C
,同时将剩余的
LC\u*
设置为
“en\u US.UTF-8”
。我在Ubuntu 16.04虚拟机中工作。我目前的环境有:

$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8" 
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

LC_CTYPE未设置

$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8" 
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
我可以看到默认值已写入该文件

$ cat /etc/default/locale
# File generated by update-locale
LC_CTYPE=C
但是当我
source~/.bashrc
或重新启动虚拟机时,它仍然不会显示
“C”
。也没有
LC\u CYTPE
变量(我不理解)

$echo$LC\u CTYPE

我遗漏了什么?

我通过执行
unset LC\u ALL
使它工作起来。一旦我这样做了,
导出LC\u CTYPE=C
就起作用了

LC_ALL
是一种覆盖。设置后,它将优先于其他LC_*env变量,并且
locale
命令将尊重这一点。我发现许多页面都说明此变量通常不是默认设置的。

区域设置手册(7)解释了如何为类别赋值:

如果setlocale(3)的第二个参数是空字符串,“, 对于默认区域设置,它是使用以下方法确定的 步骤:


您应该在Dockerfile中更改环境变量(并构建新映像),而不是在已经运行的容器中,因为这是无用的。在Ubuntu 16.04 VM中也会发生同样的事情。Sourcing
~/.bashrc
通常不会重新读取全局配置文件。无论如何,这更适合askubuntu.com。
$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8" 
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
$ cat /etc/default/locale
# File generated by update-locale
LC_CTYPE=C
$ echo $LC_CTYPE
<empty string here>
   1. If there is a non-null environment variable LC_ALL, the value
      of LC_ALL is used.

   2. If an environment variable with the same name as one of the
      categories above exists and is non-null, its value is used for
      that category.

   3. If there is a non-null environment variable LANG, the value of
      LANG is used.