shell实例第19讲:一个脚本中调用另一个脚本的3种方法

您所在的位置:网站首页 执行shell脚本生成日志文件的方法 shell实例第19讲:一个脚本中调用另一个脚本的3种方法

shell实例第19讲:一个脚本中调用另一个脚本的3种方法

2023-08-27 22:48| 来源: 网络整理| 查看: 265

在Shell脚本中调用另一个脚本(3种方法)

准备:主脚本是second.sh,主脚本中调用first.sh

方法1:exec (1)执行方式:exec /home/weibo/shell_test/second.sh (2)特点: 1)运行主脚本时不会新开一个子shell来执行被调用脚本first.sh,被调用的脚本与主脚本在同一个Shell内执行,所以被调用的脚本中声明的变量和环境变量, 都可以在主脚本中进行获取和使用。 2)使用exec调用一个新脚本以后, 父脚本中exec行之后的内容就不会再执行 方法3:source (1)执行方式:source /home/weibo/shell_test/first.sh (2)特点: 1)同exec的特点1,即运行主脚本时不会新开一个子shell来执行被调用脚本first.sh,被调用的脚本与主脚本在同一个Shell内执行。 2)使用source调用一个新脚本以后, 主脚本中exec行之后的内容还会执行 方法3:fork (1)执行方式:在主脚本中写所要调用脚本的路径,比如/home/weibo/shell_test/first.sh (2)特点: 1)运行主脚本时会新开一个子shell来执行脚本first.sh; 2)子shell执行的时候,父shell还在; 3)子shell执行完毕后返回父shell,但是子shell中的环境变量不会带回父shell 主脚本second.sh #!/bin/bash #作者:魏波 #时间:2017.3.4 A=100 echo "before exec/source/fork: PID for second.sh = $$" export A echo "In second.sh: variable second_variable=$A" case $1 in --exec) echo -e "==>>> using exec start\n" exec /home/weibo/shell_test/first.sh ;; --source) echo -e "==>>> using source start\n" . /home/weibo/shell_test/first.sh ;; --fork) echo -e "==>>> using fork start\n" /home/weibo/shell_test/first.sh ;; esac echo "after exec/source/fork: PID for second.sh = $$" echo -e "In second.sh: variable second_variable=$A\n" 被调脚本first.sh #!/bin/bash #作者:魏波 #时间:2017.3.4 echo "PID for first.sh = $$" echo "In first.sh get variable second_variable=$A from second.sh" A=200 export A echo -e "In first_variable.sh: variable first_variable=$A\n"

注:这两个脚本中的参数 $$ 用于返回脚本的 PID , 也就是进程 ID。这个例子是想通过显示 PID 判断两个脚本是分开执行还是同一进程里执行,也就是是否有新开子 Shell。chmod +x first.sh second.sh 给两个脚本加上可执行权限后执行。

 

执行结果: 1、验证方法1:exec

2、 验证方法2:source

3、 验证方法3:fork

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3