UNIXC01 环境变量

环境变量

程序和进程

  • 程序是计算机指令的集合, 存储在磁盘空间里, 是静态的.
  • 进程是程序执行的实例, 是程序加载到内存里执行的过程的描述, 是动态的
  • 程序运行期间称为进程, 程序运行完毕进程结束. 程序运行一次产生一个进程
  • 每个进程都维护着一个环境变量列表, 进程可以通过这些变量访问计算机的资源
  • 使用pstree查看进程树

环境变量

  • bash 进程有两种变量,自定义变量和环境变量
    • 可以被子进程继承的变量称为环境变量
    • 进程私有的变量称为自定义变量, 不能被子进程继承
  • 可以使用env查看bash进程的环境变量, 格式都是 name = value
  • $name可以获取环境变量或自定义变量的值
  • name = value 如果name是环境变量, 将环境变量的值更改为value, 如果name不是环境变量, 为bash进程添加自定义变量, 值为value
  • export name 将name输出为环境变量
  • unset name 删除变量(环境变量或自定义变量)name

代码演示操作环境变量

# 打开两个terminal, 在第2个terminal下 pstree会显示有两个bash兄弟进程
$ pstree
....
|         |         |         |-gnome-terminal--+-bash
|         |         |         |                 |-bash---pstree
....
# env查看bash进程的环境变量,
$ env
....
USER=moonx
....
# 获取环境变量的值
$ echo $USER
moonx
# 更改环境变量的值
USER=xuehui
$ echo $USER
xuehui

#如果给的name不是环境变量, 那就会添加一个自定义变量
$ echo $caption
$ caption=shenzhen
$ echo $caption 
shenzhen
$ env| grep caption #环境变量没有caption
$ env| grep USER
USER=xuehui

#自定义变量无法被子进程继承
$ pstree
....
        |         |         |         |-gnome-terminal--+-bash
        |         |         |         |                 |-bash---pstree
....
$ bash
$ pstree
....
        |         |         |         |-gnome-terminal--+-bash
        |         |         |         |                 |-bash---bash---pstree

....
$ echo $caption

$ exit
exit
#父进程中自定义变量依然存在
$ echo $caption 
shengzhen

# 将自定义变量转为环境变量
$ export caption=shenzhen
$ env| grep caption
caption=shenzhen
$ bash
$ env| grep caption
caption=shenzhen

# 环境变量caption是从父进程继承的, 修改其值不会影响父进程中环境变量caption的值
$  env| grep caption
caption=shenzhen
$ caption=xian
$ env| grep caption
caption=xian
$ exit
exit
#父进程中的环境变量并没有被子进程修改
$ env| grep caption
caption=shenzhen

# 兄弟进程对环境变量的修改不会影响自己
# 回到第一个terminal
$ pstree
....
|         |         |         |-gnome-terminal--+-bash---pstree
|         |         |         |                 |-bash
....
$ env| grep caption
$

# 回到第二terminal取消环境变量
$ echo $caption 
shenzhen
$ unset caption 
$ echo $caption 
$ 
$

两个常用变量

1. PS1自定义变量的使用

  • bash进程通过变量PS1设置用户的提示符
moonx@moonx:~ $ env| grep PS1
moonx@moonx:~ $ echo $PS1
\[\033[1;36;01m\]\u\[\033[00m\]\[\033[1;34;01m\]@\[\033[00m\]\[\033[1;32;01m\]\h\[\033[00m\]\[\033[34;01m\]:\[\033[00m\]\[\033[33;01m\]\w\[\033[00m\]\[\033[31;01m\] $\[\033[37;00m\]
moonx@moonx:~ $ pwd
/home/moonx
moonx@moonx:~ $ PS1="\W\$"
~$pwd
/home/moonx
~$bash
moonx@moonx:~ $ exit
exit
~$

2. PATH 环境变量的使用

  • bash进程通过环境变量PATH找到linux命令的可执行程序
    • 格式为: 分割的多个路径. 当在bash下输入命令的时候, 首先在第一个路径下找该命令的可执行程序, 找到就执行, 否则向下一个找… 如果最后一个路径都找不到, 就提示该命令无法找到的错误.
$ echo #PATH
$ echo $PATH
/home/moonx/anaconda2/bin:/home/moonx/bin:/home/moonx/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
$ which ls
/bin/ls
# 可以把某个a.out mv到 /bin/ls, 那么 ls 返回是 a.out的结果, 这里不做实验

# 在a.out的目录下 ./a.out 才能执行
$ a.out
a.out: command not found
$ PATH=$PATH:.
$ echo $PATH
/home/moonx/anaconda2/bin:/home/moonx/bin:/home/moonx/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:.
# 在 a.out 当前目录可以直接执行不用在家
$ a.out
$ #执行

刚刚对PS1和PATH改动, 只能在当前bash进程中其作用, 除非把改动写到 ~/.bashrc, 因为bash进程启动以后会自动执行脚本文件 ~/.bashrc

# 最后一行加上变量改动
$ vim ~/.bashrc
....
#
PS1="\W\$"
#
export PATH=$PATH:. #加不加export都行, 因为PATH已经是环境变量了

这样即使打开新窗口, 环境变量的改动依然存在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值