shell 环境变量

Bash shell中的变量一般可以分为3种:

  • 用户自定义变量
  • 环境变量
  • 特殊变量:位置变量、预定义变量等

用户自定义变量的作用域只作用于当前的shell,相当于一个局部变量,其他shell是无法使用的。而环境变量则是全局的,每一个shell都是可以使用的。

使用export命令可以将一个用户自定义的变量导出为环境变量。若要想永久保存环境变量,需要修改环境变量配置文件 ~/.bashrc:

export url=www.zhaixue.cc

将上面这行命令保存到当前用户的~/.bashrc文件中,然后打开多个shell,使用echo $url命令,都可以正确打印这个变量的值。

zhaixue@ubuntu:~$ source ~/.bashrc 
zhaixue@ubuntu:~$ echo $url
www.zhaixue.cc

环境变量配置文件

不同的Linux操作系统,环境变量的配置文件稍微有点差异,常见的环境变量配置文件有:

  • /etc/profile:系统初始化时会执行
  • /etc/bash.bashrc:切换用户时执行
  • /etc/profile.d/*.sh:
  • ~/.bashrc:登录用户时执行

如果系统已经启动,或者你已经登录用户,然后再修改这些配置文件,此时你需要使用source命令,才能使你新修改的配置生效。

PATH环境变量

系统环境变量PATH中保存的是shell命令的搜索路径。当用户在shell交互环境下敲击一个命令时,shell会根据这个命令名到PATH环境变量指定的路径下去寻找各个文件,找到后就会执行,没有找到的话就会报错,提示用户找不到该命令。

root@pc:/# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
root@pc:/# pwd
/
root@pc:/# pwddddd
pwddddd: command not found

在Ubuntu环境下,用户使用apt-get命令安装新的工具软件,一般都是默认安装到PATH指定的这些路径中。如果你想把软件安装到其他路径,就需要告诉系统这个路径,否则你执行命令时,系统就找不到该命令在文件系统中的存储路径,无法执行。

通过修改PATH环境变量,可以给系统添加新的执行路径,在可以在~/.bashrc文件里,使用export修改PATH环境变量:

root@pc:/# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
root@pc:/# echo 'export PATH=$PATH:/home/hello' >> ~/.bashrc
root@pc:/# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/hello

使用echo命令,在~/.bashrc文件末尾追加一行:export PATH=$PATH:/home/hello, 其实就相当于将/home/hello这个路径追加到PATH变量中,然后你安装到/home/hello目录下的程序就可以在任意目录下敲击文件名执行了。

在嵌入式开发中,用户需要经常安装不同版本的交叉编译器,此时你可以使用这种方法,将交叉编译器的存放路径通过PATH告诉系统,然后就可以直接敲击arm-linux-gcc命令去交叉编译你的ARM程序了。

一些常见的环境变量

  • HOME:当前用户的主目录,内部命令cd打开的默认目录
  • IFS:分来分隔字段的一组字符,如空格、tab键、新的一行等
  • PS1:主提示符,默认值是”\s\v$ “
  • PS2:第二提示符,默认是“> ”
  • PS3:shell内建命令select的提示符,若没有设置这个变量,默认是“#?”
  • PWD:当前工作目录
  • SHELL:保存shell的完整路径
  • UID:只读变量,当前用户的实际用户ID,root用户为0,普通用户一般为1000
  • USER:当前用户名称
  • HOSTNAME:主机名
  • $HISTSIZE:历史命令大小,一般是1000个记录
《Linux三剑客》视频教程:Linux下开发工具vim、Git、Makefile、autotools、qemu、debug精讲,从零开始一步一步写项目的Makefile,提供企业级Makefile模板,Git操作实战,vim从新手到高手,一步一步打造类似Source Insight的IDE!详情点击:王利涛老师个人淘宝店:Linux三剑客