`

shell学习之-shell调用shell

 
阅读更多

在shell脚本中调用另一个脚本的三种不同方法(fork, exec, source)

2008-05-06 14:43:18|分类: LINUX |标签: |字号订阅

  • fork ( /directory/script.sh)

fork是最普通的, 就是直接在脚本里面用/directory/script.sh来调用script.sh这个脚本.

运行的时候开一个sub-shell执行调用的脚本,sub-shell执行的时候, parent-shell还在。

sub-shell执行完毕后返回parent-shell. sub-shell从parent-shell继承环境变量.但是sub-shell中的环境变量不会带回parent-shell

  • exec (exec /directory/script.sh)

exec与fork不同,不需要新开一个sub-shell来执行被调用的脚本. 被调用的脚本与父脚本在同一个shell内执行。但是使用exec调用一个新脚本以后, 父脚本中exec行之后的内容就不会再执行了。这是exec和source的区别

  • source (source /directory/script.sh)

与fork的区别是不新开一个sub-shell来执行被调用的脚本,而是在同一个shell中执行. 所以被调用的脚本中声明的变量和环境变量, 都可以在主脚本中得到和使用.

 

可以通过下面这两个脚本来体会三种调用方式的不同:

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
PID for 1.sh before exec/source/fork:5845364
1.sh: $A is B
using fork by default…
PID for 2.sh: 5242940
2.sh get $A=B from 1.sh
2.sh: $A is C
PID for 1.sh after exec/source/fork:5845364
1.sh: $A is B
$ ./1.sh exec
PID for 1.sh before exec/source/fork:5562668
1.sh: $A is B
using exec…
PID for 2.sh: 5562668
2.sh get $A=B from 1.sh
2.sh: $A is C
$ ./1.sh source
PID for 1.sh before exec/source/fork:5156894
1.sh: $A is B
using source…
PID for 2.sh: 5156894
2.sh get $A=B from 1.sh
2.sh: $A is C
PID for 1.sh after exec/source/fork:5156894
1.sh: $A is C
$

分享到:
评论

相关推荐

    PyPI 官网下载 | cloudshell-app-helper-1.0.5.tar.gz

    **PyPI 官网下载 | cloudshell-app-helper-1.0.5.tar.gz** PyPI(Python Package Index)是Python编程语言的官方软件仓库,它为开发者提供了发布、分享和发现Python模块的平台。在本案例中,我们讨论的是一个名为`...

    PyPI 官网下载 | cloudshell-cp-azure-1.9.1.tar.gz

    《PyPI上的cloudshell-cp-azure-1.9.1.tar.gz:探索Azure云服务与Python的深度集成》 PyPI(Python Package Index)是Python开发者获取和分享开源软件包的重要平台。在这个平台上,我们可以找到名为“cloudshell-cp...

    利用app-process实现免root调用shell-Java-下载

    通过学习这些示例,你可以更好地理解如何在Android上利用`app_process`来调用shell命令,以及如何处理相关的Java编程和权限问题。 总的来说,掌握`app_process`的使用不仅可以帮助开发者在非root环境下执行系统级...

    解决Unity不能调用shell脚本传递参数的问题

    ### 解决Unity不能调用shell脚本传递参数的问题 在Unity开发过程中,有时我们需要与操作系统进行交互,例如执行shell脚本来处理一些特定的任务。但在实际操作中,可能会遇到Unity无法正确调用shell脚本并传递参数的...

    Python库 | shell-as-service-0.1.1.zip

    "shell-as-service"库的核心概念就是服务化,即将命令行操作转化为服务,让其他程序或者远程客户端可以调用。 该库可能包括以下主要组件和功能: 1. **服务器端组件**:这是运行在目标机器上的部分,接收并执行来自...

    PyPI 官网下载 | cloudshell-octopus-deploy-4.1.80.zip

    《PyPI官网下载:cloudshell-octopus-deploy-4.1.80.zip——Python库解析》 PyPI(Python Package Index)是Python开发者的重要资源库,它为全球的Python用户提供了大量的开源软件包和模块,使得开发变得更加便捷。...

    shell脚本学习指南-中文版

    1. **Shell简介**:Shell是操作系统提供的一个用户界面,它允许用户输入命令并执行系统调用。常见的Shell有Bash(Bourne-Again SHell)、Sh、Csh、Ksh和Zsh等。 2. **Bash shell**:Bash是最广泛使用的Shell,它是...

    java调用shell命令.pdf

    Java 调用 Shell 命令 在 Java 中调用 Shell 命令是非常常见的操作,特别是在需要执行系统命令或脚本时。在这个例子中,我们将看到如何使用 Java 调用 Shell 命令,并介绍相关的知识点。 Java 调用 Shell 命令的...

    SHELL编程---初学者

    **SHELL编程初学者指南** SHELL编程是UNIX和Linux操作系统中的重要组成部分,它是一种...《UNIX[1].Shell编程24学时教程.pdf》这样的资源会详细讲解这些主题,并提供实际案例供读者练习,是学习SHELL编程的理想材料。

    shell_script-master源码

    4. **函数**:Shell脚本支持定义和调用函数,使得代码模块化,更易于维护。 5. **输入/输出重定向**:`>`用于重定向输出到文件,`用于从文件读取输入,`>>`用于追加输出到文件。 6. **管道符**:`|`允许你将一个...

    x-shell和x-ftp安装包.(免费版)

    它与X-Shell无缝集成,用户可以在X-Shell的终端环境中直接调用X-Ftp进行文件传输,无需在多个窗口之间切换。X-Ftp支持拖放操作,界面直观,操作简便,同时具备文件预览、文件同步和计划任务等功能,确保了文件传输的...

    shell 脚本编程 - v1.11

    在后续章节中,教程可能还会涵盖更多内容,如错误处理、环境变量、Shell函数、脚本调试技巧,甚至可能涉及到更高级的主题,如进程管理、信号处理以及与系统调用的交互。 通过这个教程的学习,读者将能够编写出功能...

    java调用shell(包含有参数的调用)

    在某些情况下,Java程序需要调用Shell脚本执行特定的操作,比如访问Linux系统命令或者自动化执行一些任务。本文将详细解释Java如何调用Shell脚本,包括如何编写Shell脚本和在Java中如何传递参数。 首先,Shell脚本...

    Debian-Shell-Tools-master.zip

    标题中的"Debian-Shell-Tools-master.zip"表明这是一个基于Debian操作系统的shell脚本工具集合,主要用于提高系统管理和自动化任务的效率。这个压缩包很可能包含了一系列的bash脚本和其他相关辅助文件,方便用户在...

    shell脚本学习指南,中文清晰带书签

    - **函数定义与调用**:Shell脚本支持函数定义,可以提高代码的复用性和可读性。 - 示例: ```bash function greet() { echo "Hello, $1" } greet "Alice" ``` - **错误处理**:通过设置脚本的退出状态码...

    Linux零基础学习笔记 Shell编程-菜鸟入门(超详细)

    本文将深入浅出地介绍Linux的基础知识,特别是Shell编程,为初学者提供一个全面的学习路径。 首先,我们需要理解Linux的核心概念。Linux是一种类Unix操作系统,它的核心是一个内核,负责管理硬件资源,而用户通过...

    PyPI 官网下载 | shell_utils-2.0-py2.py3-none-any.whl

    shell_utils是一个专门用于处理shell命令的Python库,它的主要功能是提供一套接口,使得在Python程序中调用操作系统命令变得简单且安全。这个版本号为2.0的库支持Python 2和Python 3,意味着无论你是使用哪个版本的...

    shell-_-Linux-.zip_shell 进程

    在这个"shell-_-Linux-.zip_shell 进程"压缩包中,包含了一系列用于监控系统和进程资源的脚本,下面我们来详细探讨这些脚本及其涉及的知识点。 1. **function.inc**:这个文件通常包含了通用的函数定义,可以在其他...

Global site tag (gtag.js) - Google Analytics