网站管理与维护,腾讯建设网站视频下载,静态班级网站,百度网址导航主页1、source
source a.sh 在当前shell内去读取、执行a.sh#xff0c;而a.sh不需要有执行权限 source命令可以简写为. . a.sh 注意#xff1a;中间是有空格的。
2、sh/bash
sh a.sh bash a.sh 都是打开一个subshell去读取、执行a.sh#xff0c;而a.…1、source
source a.sh 在当前shell内去读取、执行a.sh而a.sh不需要有执行权限 source命令可以简写为. . a.sh 注意中间是有空格的。
2、sh/bash
sh a.sh bash a.sh 都是打开一个subshell去读取、执行a.sh而a.sh不需要有执行权限 通常在subshell里运行的脚本里设置变量不会影响到父shell的。
3、./
chmod x a.sh ./a.sh 打开一个subshell去读取、执行a.sh但a.sh需要有执行权限 可以用chmod x添加执行权限 另外使用./来执行的文件里有alias语句的话shell并不会把alias别名扩展成对应的命令要解决的话得使用shopt命令来开启alias扩展选项 shopt -s expand_aliases
4、fork、source、exec
使用fork方式运行script时 就是让shell(parent process)产生一个child process去执行该script当child process结束后会返回parent process但parent process的环境是不会因child process的改变而改变的。使用source方式运行script时就是让script在当前process内执行 而不是产生一个child process来执行。由于所有执行结果均于当前process内完成若script的环境有所改变 当然也会改变当前process环境了。使用exec方式运行script时它和source一样也是让script在当前process内执行但是process内的原代码剩下部分将被终止。同样process内的环境随script改变而改变。通常如果我们执行时都是默认为fork的。
实践
为了实践下我们可以先建立2个sh文件以下代码来自ChinaUnix的網中人
1.sh
#!/bin/bash
AB
echo PID for 1.sh before exec/source/fork:$$
export A
echo 1.sh: \$A is $A
case $1 inexec)echo using exec...exec ./2.sh ;;source)echo using source.... ./2.sh ;;*)echo using fork by default..../2.sh ;;
esac
echo PID for 1.sh after exec/source/fork:$$
echo 1.sh: \$A is $A2.sh
#!/bin/bash
echo PID for 2.sh: $$
echo 2.sh get \$A$A from 1.sh
AC
export A
echo 2.sh: \$A is $A按如下步骤运行查看结果
chmod x 1.sh
chmod x 2.sh
./1.sh fork
./1.sh source
./1.sh exec参考文章
参考文章