shell命令解析器与环境变量

shell是什么

shell就是一个应用程序,我们可以通过键盘、串口给他发送命令,回车后就会去执行这些命令。一般命令由程序名和命令名组成,shell会到PATH环境变量去找输入的程序,也可以输入绝对、相对路径,shell就会到输入的路径去寻找程序。
例如这样一个应用程序hello.c:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<stdio.h>

int main(int argc, char **argv)
{
if(argv >= 2)
{
printf("Hello, argv[1]\n");
}
else
{
printf("Hello, World!\n);
}
return 0;
}

如果用gcc编译一下, 会产生一个可执行文件hello。

gcc -o hello hello.c

如果我们在终端中输入hello,终端会提示错误,因为终端在PATH环境变量中找不到hello这个程序。所以我们输入相对路径./hello。 终端会输出:

Hello, World!

如果我们在程序名后面加上命令名,例如:

./hello seraphembera

终端输出:

Hello, seraphembera!

这里的seraphembera就是命令名。

PATH环境变量

环境变量是什么

环境变量就是操作系统维护了一个全局变量表,所有系统进程都可以访问。

环境变量的作用

将变量共享给多个进程,或者传递变量给子进程。

永久设置方法

修改/etc/environment

例如:

sudo gedit /etc/environment

然后添加下行:

PATH="/usr/local/sbin:usr/local/bin:usr/sbin:/sbin:/bin:/usr/games:/usr/local/games:/home/book"

然后重启系统或重新登陆,这种方法对所有用户有效。

修改~/.bashrc

例如:

export PATH=$PATH:/home/book

然后重启系统或重新登陆,这种方法只对当前用户有效。

临时设置方法

例如:

export PATH=$PATH:/home/book