zoukankan      html  css  js  c++  java
  • shell脚本中调用其他脚本

    目前来说有三种方法:

        1. 脚本绝对路径

            这个方式是最普通的,底层调用的是fork实现,运行的时候开一个子shell执行调用的脚本,子shell执行的时候,父shell还在

            子shell执行完毕后返回父shell,子shell从父shell继承环境变量,但是子shell中的环境变量不会带回父shell中

        2. 句号 + 脚本绝对路径

            底层调用的是source实现的,他于fork的区别是不新开一个子shell来执行被调用的脚本,而是在同一个shell中执行,所以被调用脚本中申明的变量和环境变量,都可以在主脚本中得到和使用

        2. exec + 脚本绝对路径

            exec与fork不同,不需要新开一个子shell来执行被调用的脚本,而是在同一个shell中执行,但是使用exec调用一个新脚本以后,父脚本exec以后的内容就不会再执行了

    下面是一个脚本的例子:

    父脚本(1.sh):

    #!/bin/bash
    A=B
    echo "PID for 1.sh before exec/source/fork:$$"
    export A
    echo "1.sh: \$A is $A"
    case $1 in
            exec)
                    echo "using exec…"
                    exec ./2.sh ;;
            source)
                    echo "using source…"
                    . ./2.sh ;;
            *)
                    echo "using fork by default…"
                    ./2.sh ;;
    esac
    echo "PID for 1.sh after exec/source/fork:$$"
    echo "1.sh: \$A is $A"

    子脚本(2.sh):

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

    分别调用:

    1.sh

    1.sh exce

    1.sh source

    可以观察输出是否满足上述规律

  • 相关阅读:
    第一次作业:准备
    结对项目-四则运算 “软件”之升级版
    第三次作业:个人项目-小学四则运算 “软件”之初版
    分布式版本控制系统Git的安装与使用
    第一次作业9.6
    C语言--数据类型
    C语言--函数
    C语言--嵌套循环
    C语言--输入输出格式
    DateGrip连接Oracle,MySQL
  • 原文地址:https://www.cnblogs.com/zhangzhang/p/2859708.html
Copyright © 2011-2022 走看看