博客
关于我
linux shell 编程 9 脚本中调用脚本
阅读量:791 次
发布时间: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/

    你可能感兴趣的文章
    Linux Ubuntu 装LAMP心得
    查看>>
    linux Ubuntu安装ftp并将本地文件上传到云服务器
    查看>>
    linux udev 自动挂载 SD卡/U盘
    查看>>
    Linux UDP C/S例子
    查看>>
    Linux uniq学习笔记
    查看>>
    Linux unit14
    查看>>
    Linux VFS中write系统调用实现原理【转】
    查看>>
    Linux VI command
    查看>>
    linux vim 插件
    查看>>
    Linux vim 操作大集合,Linux运维工程师收藏!
    查看>>
    Linux vim编辑器
    查看>>
    LINUX weblogic集群搭建- 03启动脚本的控制
    查看>>
    Linux wget 下载 文件到指定目录
    查看>>
    linux who命令实现,用标准IO实现linux的who命令
    查看>>
    linux xampp php更改,Linux下xampp 安装php扩展(linux配置memadmin)
    查看>>
    Linux xfs和ext4的区别
    查看>>
    Linux yum-config-manager命令找不到的解决方法
    查看>>
    linux yum命令详解
    查看>>
    Linux yum在线安装软件包实战
    查看>>
    linux zip压缩排除目录,linux tar压缩排除某个文件夹的方法
    查看>>