曾格0 2022-11-30 19:40 采纳率: 43.8%
浏览 16

为什么在不同的shell终端,linux系统编码不同

如图:两个shell终端的编码分别是GBK和UTF-8,分别设置export LC_ALL=zh_CN.GBK和export LC_ALL=zh_CN.UTF-8,结果发现两个终端的系统编码互不干扰,这是说一个Linux系统在不同的终端,有不同的系统编码?

img

img

想知道系统编码到底是指什么?请大家指教

  • 写回答

3条回答 默认 最新

  • 千册 Linux领域新星创作者 2022-11-30 23:27
    关注

    这个涉及到进程和系统环境变量的关系问题。两个终端是两个不同的进程,LC_ALL是系统环境变量。
    只有上升到这个层次,才能想明白这个问题。
    例如,在一个进程中修改了环境变量PATH:
    它会影响到它的父进程吗?不会,它会影响到它的子进程吗?一会测试一下。
    两个不同的终端他们可能是什么关系?他们大概率是兄弟进程关系关系。肯定不会。
    在一个已经打开的终端中使用export修改一个环境变量,会影响另一个已经打开的终端环境变量吗?不会,这个可以测试。
    测试一 子进程更改环境变量,不影响父进程
    1 先查看当前的PATH值

    csdn@ubuntu:~/shelltest$ echo $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
    csdn@ubuntu:~/shelltest$ 
    
    

    2 添加一个脚本,名为child.sh,并执行这个脚本

    echo "i'm a child"
    echo 'child PATH'=$PATH
    export PATH=/home/lkmao
    echo 'modify child PATH'=$PATH
    
    
    

    执行child.sh,如下所示,看到,确实更改了PATH的值。

    csdn@ubuntu:~/shelltest$ bash child.sh
    i'm a child
    child PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
    modify child PATH=/home/lkmao
    csdn@ubuntu:~/shelltest$
    
    
    
    

    3 在终端中再次查看PATH的值。为了证明清白,这里截图了,看到PATH值没变

    img


    结论 :子进程修改环境变量值,不影响父进程

    测试二:父进程修改环境变量值,会影响子进程吗?
    这个简单一点,首先在终端执行export PATH=/hello/world/:$PATH
    然后执行bash child.sh,观察输出结果:见下图,发现父进程修改了PATH的值,影响了子进程的环境变量值。

    img

    测试三:不同终端的环境变量会影响吗?接着上面的测试,分别打印两个终端的进程号 echo $$,然后再打印两个终端的环境变量PATH,发现不会有影响。除非这个值被以export VAL="新的值"的形式添加到了,/etc/profile后面,而且,这也得,新打开的终端才会生效。后者是在终端中执行source /etc/profile。

    img

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 11月30日

悬赏问题

  • ¥50 复现论文;matlab代码编写
  • ¥30 echarts 3d地图怎么实现一进来页面散点数据和卡片一起轮播
  • ¥15 数字图像的降噪滤波增强
  • ¥15 心碎了,为啥我的神经网络训练的时候第二个批次反向传播会报错呀,第一个批次都没有问题
  • ¥15 MSR2680-XS路由器频繁卡顿问题
  • ¥15 VB6可以成功读取的文件,用C#读不了
  • ¥15 如何使用micpyhon解析Modbus RTU返回指定站号的湿度值,并确保正确?
  • ¥15 C++ 句柄后台鼠标拖动如何实现
  • ¥15 有人会SIRIUS 5.8.0这个软件吗
  • ¥30 comsol仿真等离激元