博客
关于我
linux shell 编程 9 脚本中调用脚本
阅读量:803 次
发布时间:2023-02-01

本文共 1252 字,大约阅读时间需要 4 分钟。

在shell脚本中调用另一个脚本的方法有三种:fork、exec和source,每种方法的特点不同,适用于不同的场景。以下从实际案例出发,详细说明每种方法的工作原理和适用场景。

Fork方法

fork命令用于新建子进程,调用另一个脚本的方式最为简单直接。只需在shell脚本中执行如./script.sh,即可启动子进程执行目标脚本。这种方法的优点是新建子进程与父进程独立运行,子进程的环境变量不会影响父进程,但也意味着parent_shell会等待子进程完成后才能继续执行后续命令。

Exec方法

exec命令与fork的主要区别在于,它不会创建新的子进程,而是让子脚本在父进程的环境中执行。这样被调用脚本与父脚本在同一个shell空间中运行,实现了环境变量和信号流的传递。然而,这也意味着一旦exec命令执行,父脚本的后续操作将不再执行,以此注定了exec命令的特性。

Source方法

source命令在功能上更接近于fork,但它避免了新建子进程,而是在当前shell中直接加载目标脚本的内容。这种方式的优势在于子进程的环境变量、函数和变量等都会被父脚本继承和使用,但同样需要注意parent_shell仍需等待整个调用完成。

对比案例解读

为了直观理解这三种方法的区别,我们可以通过以下两个脚本对比它们的执行效果:

####脚本1(t1.sh)

#!/bin/bashecho "PID for 1.sh:$$"export Aecho "1.sh: $A is $A"case $1 in  exec)    echo "using exec…"    exec ./t2.sh ;;  source)    echo "using source…"    source ./t2.sh ;;  *)    echo "using fork by default…"    ./t2.sh ;;esacecho "PID for 1.sh after:$$"echo "1.sh: $A is $A"

####脚本2(t2.sh)

#!/bin/bashecho "PID for 2.sh:$$"echo "2.sh get $A=$A from 1.sh"export Aecho "2.sh: $A is $A"

执行结果分析

  • 默认方式(fork)

    执行sh t1.sh会调用t2.sh,新建子进程执行。parent_shell可在子进程完成后继续执行后续操作,子进程的环境变量不会反映到父进程。

  • exec方式

    执行sh t1.sh exec会让t2.sh在同一进程内运行,parent_shell会立即停止执行后续命令。该方式适合需要捎带某些操作的场景。

  • source方式

    执行sh t1.sh source会让t2.sh在同一进程中运行,且环境变量和其他状态会被parent_shell继承。这种方式保留了子进程对父进程环境的修改能力。

  • 每种方法有其优劣之处,选择时需结合实际需求。

    转载地址:http://qnwfk.baihongyu.com/

    你可能感兴趣的文章
    MS Edge浏览器“STATUS_INVALID_IMAGE_HASH“兼容性问题
    查看>>
    ms sql server 2008 sp2更新异常
    查看>>
    MS SQL查询库、表、列数据结构信息汇总
    查看>>
    MS UC 2013-0-Prepare Tool
    查看>>
    MSBuild 教程(2)
    查看>>
    msbuild发布web应用程序
    查看>>
    MSB与LSB
    查看>>
    MSCRM调用外部JS文件
    查看>>
    MSCRM调用外部JS文件
    查看>>
    MSEdgeDriver (Chromium) 不适用于版本 >= 79.0.313 (Canary)
    查看>>
    MsEdgeTTS开源项目使用教程
    查看>>
    msf
    查看>>
    MSP430F149学习之路——SPI
    查看>>
    msp430入门编程45
    查看>>
    MSSQL数据库查询优化(一)
    查看>>
    MSSQL数据库迁移到Oracle(二)
    查看>>
    MSSQL日期格式转换函数(使用CONVERT)
    查看>>
    MSTP多生成树协议(第二课)
    查看>>
    MSTP是什么?有哪些专有名词?
    查看>>
    Mstsc 远程桌面链接 And 网络映射
    查看>>