关于linux环境变量的一些归纳

关于linux环境变量的一些归纳

最近在写一些脚本时常常遇到关于环境变量设置不当导致的问题,这里记录一下我归纳的细节吧。

首先就ubuntu系统而言,环境变量分为系统级和用户级的,这里有博客说的比较清楚了 环境变量详解

我大概归纳一下,就是我们常用的shell 登录时,即ssh登录,如果默认是bash的情况下(大多数如此),会自动调用/etc/profile和/.profile,而这两个profile中都会去调用/etc/bash.bashrc和/.bashrc,完成环境变量的初始化,而在我们手动开启新的shell,如终端输入bash,也会调用~/.bashrc。但是运行bash -c cmd命令,则不会。所以,对于登录和非登录的交互式login,都会重新初始化环境变量,但是非交互式bash则不会。,虽然他们都会开启一个新的shell。

第二点是关于source,source可用.来替代,相比较于sh或者./,可以实现变量延长存在,什么意思呢,就是我在一个shell脚本中设置了一个变量,但是shell退出后,这个变量就失效了,但是如果用source,这个变量将会继续存在。这里有个坑
在sh脚本中source .bashrc可能会出现环境变量未更新的情况,这不是因为source没起作用,而是因为.bashrc开头设置了一个判断,判断当前shell是否是交互式的,即通过$-这个变量来说明,如果不是,则返回,不作任何操作,显然,sh脚本是非交互式的shell,便不能更新了。解决方法是去掉这个判断,或者把export的内容重新写到另一个脚本来source

第三点就是export和=,都是变量设置,但是export可以将这个变量传递给子shell,但是=不行。=还有另外一个用法,就是加在命令前,并通过空格分隔,可实现临时的环境变量,仅对该命令的shell环境有效。

第四点就是source的环境变量影响范围,仅对该shell及其子shell’管用,对父shell不管用,就是说我们企图在一个sh脚本中source某个环境变量脚本,但是退出后source 失效。这个问题可通过source该sh脚本实现。

第五点就是关于zsh,在常使用的oh-my-zsh中,我们从bash切换到zsh,及通过运行zsh实现,但此时zsh是bash的子shell,会继承来自bash的环境变量,并且再加上zshrc自带的项,但zsh退出后不会影响bash的环境变量。还有利用chsh -s {shell}命令不会影响环境变量,只有手动bash/zsh,这样相当于重新开了一个shell,ctrl+D退出后也失效了。

补充一个,就是在zsh下执行source ~/.bashrc和在bash下执行source ~/.zshrc也可以改变环境变量,因为无非是一些export语句,但是可能其他命令会出错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值