一、运行linux的三种方法
1 :使文件具有可执行权限,直接运行文件
2:直接调用命令解释器执行程序
3: 使用source执行程序
二、shell的命令和种类
Linux shell可执行的命令有3种,内建命令、shell函数和外部命令,其中,shell执行内建命令时,没有进程的创建和消亡,而执行外部命令时,存在进程的创建和消亡。
外部命令详细的执行过程
1:调用POSIX系统fork函数接口,创建一个命令行shell进程的复制
2:在子进程的运行环境中,查找外部命令在Linux文件系统的位置,如果外部命令给出了完全路径,则跳过查找这一步
3:在子进程中,以新程序取代shell复制并执行,此时父进程进入休眠状态,等待子进程执行完毕。
4:子进程执行完毕后,父进程接着从终端取下一个命令。
三、总结
在用bash调用脚本的时候,父进程接收到命令,发现不是内建命令,于是会创建一个和自己一模一样的shell进程来执行这个外部命令。这个子进程中设置了自己的运行的环境变量。而在此时,父进程的环境变量并没有改变。子进程执行完毕,消亡。这是一直等待的父进程来继续接收命令。而在用source来执行脚本的时候,不会创建子进程,而是在父进程中直接执行。所以当需要程序修改当前shell本身的环境变量的时候,使用source命令。
附测试脚本
分别使用bash和source执行以下脚本,执行完毕后重新运行pwd命令,会发现使用bash命令脚本执行前后路径并没有发生变化,而使用source执行脚本后路径发生了变化
#!/bin/bash
cd /tmp
echo "hello world"