linux 中source和export

结合其它人的理论和自己的实践,简单解释一下两个命令,source命令用于处理文件,模式是 : source filename,它会把filename文件中的变量添加到环境变量中,也可以理解为马上编译了一下filename中的变量,存在了系统缓存中,而不用通过重启来使filename中变量生效。

export命令:在解释这个命令之前需要弄清楚shell脚本执在linux命令客户端程序的执行原理,无论是xshell,secureCRT,putty这些linux命令客户端程序哪种,只要通过用户名登录到服务器后就会为该用户开启一个用户shell,用户可以上面敲linux命令,你在上面直接输入exit,会显示退出了当前连接,但是如果你在用户登录后不直接exit退出,而是输入bash命令,会发现你要exit两次才能断开与服务器的连接,如果输入bash多次,那就得exit多次才能断开连接,这个是怎么回事?原来bash开启了一个新的shell(可以理解为窗口),当用户登录服务器时用户看到的是最初的shell窗口,称用户shell窗口,这里窗口不是linux命令客户端程序上看到的窗口,而是客户端程序窗口里面的一个人眼看不到的一个盒子,用户输入bash命令后会在用户shell(盒子)下生成一个子shell(盒子)a,再输入bash,则是在a中执行了bash命令,相当于用户shell的子shell(盒子)中再打开了一个shell(盒子),依次类推,一层套一层,所以最后要exit多次才能把盒子一层一层退出最后断开客户端与服务器的连接。重要的是:在某个shell(父shell)中执行一个shell脚本文件,则会在当前shell(父shell)中开启一个子shell,由子shell去执行脚本文件类容,当shell脚本执行完毕,则子shell会关闭,并返回到上层shell(父shell)(通过bash命令开启的shell不会自动关闭,脚本文件执行开启的shell会在脚本执行完关闭),就是输入执行shell脚本文件命令的shell。这里就有个问题,被执行的shell脚本文件中的变量的生命周期,脚本文件中的变量只会在执行该脚本文件的shell(子shell)中有效,那如果在该shell脚本文件(父文件)中再执行一个shell脚本文件(子文件),怎么让父文件中变量能在子文件中有效?那就用到export命令,在父文件中export 变量名,则该变量能在子文件中被引用到,所以export命令作用就是让某个shell中的变量能在其后代shell中存在有效,但是不能在同辈或者父shell中存在。那怎么让该shell的变量(脚本文件中变量)在父shell中生效?就是source 脚本文件,然后就能在父shell中查看到变量了,也能在由父shell生成的该shell的同辈shell中存在了。客户端用某用户名登录服务器后,生成的shell中执行 source a.sh 后,a.sh中的变量会在用户退出登录后消亡。只有几个特定文件下的变量能在用户下次登录时还能存在用户shell中,/etc/下的文件中的变量会被应用到全局最大的shell中,随服务器启动而加载内存中,不会随用户的登出消亡,所以定义环境变量一般在做个目录下的profile文件中定义。source profile或者重启后对所有用户shell有效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值