详解Shell脚本中调用另一个Shell脚本的三种方式
主要以下有几种方式:
Command | Explanation |
---|---|
fork | 新开一个子Shell执行,子Shell可以从父Shell继承环境变量,但是子Shell中的环境变量不会带回给父Shell。 |
exec | 在同一个Shell内执行,但是父脚本中 exec 行之后的内容就不会再执行了 |
source | 在同一个Shell中执行,在被调用的脚本中声明的变量和环境变量,都可以在主脚本中进行获取和使用,相当于合并两个脚本在执行。 |
第一种:fork特点:会生成子PID而且可重复被调用。
♦fork是最普通的,就是直接在脚本里面用path/to/foo.sh来调用
♦foo.sh这个脚本,比如如果是foo.sh在当前目录下,就是./foo.sh。运行的时候terminal会新开一个子Shell执行脚本foo.sh,子Shell执行的时候,父Shell还在。子Shell执行完毕后返回父Shell。子Shell从父Shell继承环境变量,但是子Shell中的环境变量不会带回父Shell。
1.进入编辑:
[root@localhost~]#vimliqiang-2.sh
2.编辑内容调用写法:
echo在这里调用 ./liqiang.sh
3.输出结果
[root@localhost~]#./liqiang-2.sh
在这里调用
hollo
hollo
第二种:exec特点:exec调用一次之后的所有代码都不执行
♦exec与fork不同,不需要新开一个子Shell来执行被调用的脚本.被调用的脚本与父脚本在同一个Shell内执行。但是使用exec调用一个新脚本以后,父脚本中exec行之后的内容就不会再执行了。这是exec和source的区别.
1.编辑内容调用写法:
echo在这里调用 ./liqiang.sh echo这里是exec函数调用 exec./liqiang-3.sh echo这里是source sourceliqiang-4.sh echo在这里调用 ./liqiang.sh echo这里是exec函数调用 exceliqiang-3.sh echo这里是source sourceliqiang-4.sh echo在这里调用 ./liqiang.sh echo这里是exec函数调用 exceliqiang-3.sh echo这里是source sourceliqiang-4.sh
2.输出结果:特点在于执行了第一个exec之后下面的就再也不执行了。
[root@localhost~]#./liqiang-2.sh 在这里调用 hollo hollo 这里是exec函数调用 看看这里调用几次 调用一次就对了
第三种:sourcesource特点不会生成子PID也就是子进程,他就行把被用的脚本拷贝到当前shell脚本中执行,可以重复被调用。
♦与fork的区别是不新开一个子Shell来执行被调用的脚本,而是在同一个Shell中执行.所以被调用的脚本中声明的变量和环境变量,都可以在主脚本中进行获取和使用。
1.编辑内容调用写法:
echo在这里调用 ./liqiang.sh echo这里是exec函数调用这次被注释掉了 #exec./liqiang-3.sh echo这里是source sourceliqiang-4.sh echo在这里调用 ./liqiang.sh echo这里是exec函数调用被注释掉了 #exceliqiang-3.sh echo这里是source sourceliqiang-4.sh echo在这里调用 ./liqiang.sh echo这里是exec函数调用 execliqiang-3.sh echo这里是source sourceliqiang-4.sh
♦2.执行结果:
[root@localhost~]#./liqiang-2.sh 在这里调用 hollo hollo 这里是exec函数调用这次被注释掉了 这里是source 看看这里调用几次 没有限制就对了 在这里调用 hollo hollo 这里是exec函数调用被注释掉了 这里是source 看看这里调用几次 没有限制就对了 在这里调用 hollo hollo 这里是exec函数调用#之后的没被调用了
注意:
♦source方式的结果是两者在同一进程里运行。该方式相当于把两个脚本先合并再运行。
♦给多个脚本赋权限
chmoda+xliqiang-2.shliqiang-3.shliqiang-4.sh
到此这篇关于详解Shell脚本中调用另一个Shell脚本的三种方式的文章就介绍到这了,更多相关Shell调用另一个Shell脚本内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!