问题描述
正常状态下,“ip route show”命令的显示结果中,ip地址会加粗,但是使用su -l root或者su -命令登陆root账户的login shell之后,如果使用同样的命令,得到的结果中ip地址不会加粗,十分奇怪,如下图所示:

原因分析:
经过研究,是“ip route show”命令在两种环境下输出的结果中包含的非控制字符不同。如下图所示。

查阅ip命令的手册,显示:
-c[color][={always|auto|never}
Configure color output. If parameter is omitted or always, color output is enabled regardless ofstdoutstate. If parameter isauto,stdoutis checked to be a terminal before enabling color output. If parameter isnever, color output is disabled. If specified multiple times, the last one takes precedence. This flag is ignored if-jsonis also given.
Used color palette can be influenced byCOLORFGBGenvironment variable (seeENVIRONMENT).
那么有可能是COLORFGBG这个环境变量的问题,所以查看普通用户和root用户的COLORFGBG变量的情况:

可以看到,root用户的login shell是没有COLORFGBG环境变量的。
那么这个变量是怎么产生的呢?通过查阅资料,这个全局变量是终端模拟器负责产生的。当使用su -l root或者su -命令时,这就是进入login shell。login shell会尽量模拟该用户登录的状态,因此会删除当前shell下的环境变量,其中就包括COLORFGBG,并重新载入该用户的各种profile文件。登录之后,COLORFGBG不会重新生成,因为终端模拟器并没有重启。
解决方案:
那么,如果使用non-login shell登录的话,就没有这个问题,如下图所示。但是使用non-login shell登录的话,很多环境变量还是使用的当前用户的(包括COLORFGBG),而不是root用户,所以这个环境下不能执行太多复杂的命令,因为不是真实的root用户的登录环境。如果执行了应当在真正的root用户登录的环境下执行的命令,可能会出现问题。


322

被折叠的 条评论
为什么被折叠?



