通常情况下,每一个进程都有自己的运行环境,这个环境一般是由一组变量组成的,这些变量中存有进程可能需要引用的信息。Shell也有自己的环境变量。
每次当一个shell启动时,它都将创建适合于自己环境变量的shell变量。
更新或者添加一个环境变量的话,这个shell会立刻更新它自己的环境,换句话说,更改或者添加的变量会立即生效,并且所有后继声称的shell子进程(即这个shell所执行的命令)都会继承这个环境。
如果一个脚本要设置一个环境变量,那么需要使用export命令来添加或者更改环境变量。
通过./temp.sh 和 source temp.sh . temp.sh 三种方法执行带有export命令脚本文件时,对命令行的环境是否产生影响?
重点:对于Shell程序执行时的过程的理解和应用
如果在一个脚本文件中有export命令,那这个脚本只能export环境变量到这个脚本所产生的子进程中,也就是所,脚本文件中的export命令并不能影响到命令行环境,因为命令行环境位父shell进程,而脚本文件所产生的是字shell进程,两个是独立的进程,互不影响。
但是,如果使用source命令来执行脚本时,因为没有子进程的产生,此时,脚本中的export命令会影响到父进程的环境。
export命令详解:
语法:export [-fnp] [变量名称]=[变量设置值]
描述:export命令用于设置或者显示环境变量
主要选项:
-f 代表[变量名称]中为函数名称
-n 删除指定的变量。变量实际上并没有删除,只是不会输出到后续指令的执行环境中。
-p 列出所有的shell赋予程序的环境变量
行为模式:
export命令修改当前shell进程的环境变量。若将export命令置于脚本中被调用执行,则export命令对父shell进程的环境变量没有影响。
Note:
shell中执行程序时,shell会提供一组环境变量。export可新增,修改或者删除环境变量,供后续执行的程序使用。
export的效力仅作用于此登陆操作。
export 命令用于设置当前进程的环境变量。但是有效期仅仅维持到当前进程的消亡。 下次重新登录到命令行shell时,以前对shell的export设置都无法恢复。
如果想要把对环境变量的设置永久保存的话,则可以把export命令添加到shell登陆时执行的文件中。
别名:alias mysql=/usr/local/mysql/bin/mysql
alias mysqladmin=/usr/local/mysql/bin/sqladmin
启动文件中包含 别名 和 环境变量。正是这些环境变量和别名才使得shell可以作为一个用户shell来运行。
当系统初始化之后,这些别名和变量也可以被其他shell脚本使用.
bash的启动文件和登出文件
/etc/profile
系统范围的默认值,大部分用来设置环境(所有由sh衍生出的shell均适用。
/etc/bashrc
特定于Bash的,系统范围内的函数和别名
系统范围内的和特定用户的启动文件之间的区别:
系统范围内的配置文件,对于所有该系统的用户都是有效的,而用户的配置文件只对该用户登陆时才有效。
HOME/.bashprofile用户定义的,环境默认设置,在每个用户的home目录下都可找到(本地副本保存在/etc/profile)用来配置特定用户的环境变量。
HOME/.bashrc
用户定义的Bash初始化文件,可以在每个用户的home目录下找到(本地副本保存在/etc/bashrc);只有交互式的shell和用户脚本才会读取这个文件。Mac自带的Bash并不会自动读取这个脚本。
$HOME/.bash_logout
登出文件,用户定义的指令文件,可在每个用户的home目录下找到,在登出(Bash)shell的时候,这个文件中的命令都会执行。
export 命令和 env命令
export 命令设置用于当前shell的环境变量值。修改后维持不变,直到当前shell消亡。env命令则可以临时改变环境变量的值。
env -i PATH=./:$PATH echo.sh
-i选项使shell在执行echo.sh的时候,清空所有由父shell继承来的环境变量,仅仅设置命令中指定的PATH变量(将./也添加到命令搜索路径中)。这样,在执行echo.sh 的时候,就不需要给出完整路径(./echo.sh)了。
unset命令从当前shell中删除函数或者变量。删除变量时,使用-v选项(默认情况),删除函数,则使用-f选项。
env [option]… [-] [NAME=VALUE]… [COMMAND [ARG]…]
描述:
在重建的环境中运行程序,设置环境中的每个NAME为VALUE值,并且运行COMMAND.
主要选项:
不带环境变量启动 -i –ignore-environment
从环境变量中删除一个变量 -u –unset=NAME
行为模式:
为提供COMMAND时,显示环境变量的所有值和名称。提供COMMAND时,根据参数重建环境变量后,在新的环境中运行命令。
unset [-v] variable…
unset -f funcation…
描述:
从当前shell中删除变量和函数
主要选项:
-f 删除指定函数
-v 删除指定变量。在没有提供任何参数时,默认此选项
行为模式:
如果没有提供任何选项,则默认为unset为删除变量(-v选项)。如果使用-f选项,则被视为删除函数操作,参数为函数名称。
PATH变量详解:
PATH变量中存储一系列路径,路径中以冒号:隔开。一般来所,PATH变量中至少包括/bin和/usr/bin 两个目录,当shell收到一条命令的时候,这个命令时非内建命令,并且没有给出完整路径的时候,shell则在PATH变量中一次从左到右的搜索目录,直到找到该命令为止。如果一个命令在PATH 中两个不同目录中均存在,则位于PATH前端的目录中的命令会执行。
维护自己的可执行代码库:
1.为自己的代码库创建一个目录 mkdir ~/myc-code
2.将自己代码库的路径添加到PATH下
欢迎大家关注我的微信帐号!
微信号:CoderPJ
二维码:
及时查看我发布的博客,请关注我个人的微信公众号!谢谢!
长按图片–>识别二维码即可!