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

在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

 

  • 11
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魏波.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值