首页 > 其他分享 >-bash: warning: setlocale: LC_CTYPE: cannot change locale (zh_CN.UTF-8)

-bash: warning: setlocale: LC_CTYPE: cannot change locale (zh_CN.UTF-8)

时间:2022-10-17 18:01:14浏览次数:77  
标签:en UTF LC setlocale US zh CN

Linux服务端A:Red Hat Enterprise Linux release 8.
Linux客户端B:Mint20




当mint20去连接redhat8时是正常的,都没问题,但是ssh连到redhat8后要使用tab补齐时就会报错,报错如下:
[kiosk@foundation0 ~]$ ssh ro-bash: warning: setlocale: LC_CTYPE: cannot change locale (zh_CN.UTF-8)

# 在从mint20上连到redhat8的Terminal中查看字符集如下:
[kiosk@foundation0 ~]$ locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=zh_CN.UTF-8
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC=zh_CN.UTF-8
LC_TIME=zh_CN.UTF-8
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY=zh_CN.UTF-8
LC_MESSAGES="zh_CN.UTF-8"                            # 全部变成了zh_CN.UTF-8
LC_PAPER=zh_CN.UTF-8
LC_NAME=zh_CN.UTF-8
LC_ADDRESS=zh_CN.UTF-8
LC_TELEPHONE=zh_CN.UTF-8
LC_MEASUREMENT=zh_CN.UTF-8
LC_IDENTIFICATION=zh_CN.UTF-8
LC_ALL=


# 在真正的Linux服务端A上查看字符集如下:
[kiosk@foundation0 ~]$ locale
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LC_NUMERIC=en_US.UTF-8
LC_TIME=en_US.UTF-8
LC_COLLATE=en_US.UTF-8                               # 实际的字符集是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=



# 解决方法
在真正的Linux服务端A上执行:
[kiosk@foundation0 ~]$ cat /etc/environment        # 如该文件没有则需要新建
LANG=en_US.UTF-8
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"                  # 将在真正的Linux服务端A上查看到的字符集全部粘贴到environment文件中
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=


[kiosk@foundation0 ~]$ source  /etc/environmen

原因:
/etc/profile 是所有用户的环境变量
/etc/enviroment 是系统的环境变量
登陆系统时shell读取的顺序应该是
/etc/enviroment --> /etc/profile -> $HOME/.profile --> $HOME/.env
用户登录时shell读取的顺序应该是
/etc/profile -> $HOME/.profile --> $HOME/.env


/etc/environment是设置整个系统的环境,而/etc/profile是设置所有用户的环境,前者与登录用户无关,后者与登录用户有关。
系统应用程序的执行与用户环境可以是无关的,但与系统环境是相关的,所以当你登录时,你看到的提示信息,象日期、时间信息的显示格式与系统环境的LANG是相关的,缺省LANG=en_US,如果系统环境LANG=zh_CN,则提示信息是中文的,否则是英文的。


打死都要注意的事项:!!!!!!!!!(重要的事情打死都要记住,不然就得重装)
不要在redhat8的/etc/profile的最后一行加上export LC_ALL=C,加上这一行后reboot后会打不开Terminal,且必须重装系统才能恢复




标签:en,UTF,LC,setlocale,US,zh,CN
From: https://www.cnblogs.com/smlile-you-me/p/16800082.html

相关文章