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个记录