热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在Shell脚本中调用另一个脚本的三种方式讲解-shell

在Shell脚本中调用另一个脚本的三种方式讲解是千自学中一篇关于shell的文章简介:先来说一下主要以下有几种方式:fork:如果脚本有执行权限的话,pathtofoo.sh。如果没有,shpathtofoo.sh。exec:execpathtofoo.shsource:sourcepathtofoo.shforkf

先来说一下主要以下有几种方式:

fork:如果脚本有执行权限的话,path/to/foo.sh。如果没有,shpath/to/foo.sh。 exec:execpath/to/foo.sh source:sourcepath/to/foo.sh

fork

fork是最普通的,就是直接在脚本里面用path/to/foo.sh来调用foo.sh这个脚本,比如如果是foo.sh在当前目录下,就是./foo.sh。运行的时候terminal会新开一个子Shell执行脚本foo.sh,子Shell执行的时候,父Shell还在。子Shell执行完毕后返回父Shell。子Shell从父Shell继承环境变量,但是子Shell中的环境变量不会带回父Shell。

exec

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

source

与fork的区别是不新开一个子Shell来执行被调用的脚本,而是在同一个Shell中执行.所以被调用的脚本中声明的变量和环境变量,都可以在主脚本中进行获取和使用。

其实从命名上可以感知到其中的细微区别,下面通过两个脚本来体会三种调用方式的不同:

第一个脚本,我们命名为1.sh:

#!/usr/bin/envbash A=1 echo"beforeexec/source/fork:PIDfor1.sh=$$" exportA echo"In1.sh:variableA=$A" case$1in --exec) echo-e"==usingexec…\n" exec./2.sh;; --source) echo-e"==usingsource…\n" ../2.sh;; *) echo-e"==usingforkbydefault…\n" ./2.sh;; esac echo"afterexec/source/fork:PIDfor1.sh=$$" echo-e"In1.sh:variableA=$A\n"

第二个脚本,我们命名为2.sh:

#!/usr/bin/envbash echo"PIDfor2.sh=$$" echo"In2.shgetvariableA=$Afrom1.sh" A=2 exportA echo-e"In2.sh:variableA=$A\n"

注:这两个脚本中的参数$$用于返回脚本的PID,也就是进程ID。这个例子是想通过显示PID判断两个脚本是分开执行还是同一进程里执行,也就是是否有新开子Shell。当执行完脚本2.sh后,脚本1.sh后面的内容是否还执行。

chmod+x1.sh2.sh给两个脚本加上可执行权限后执行情况:

fork

fork方式可以看出,两个脚本都执行了,运行顺序为1-2-1,从两者的PID值(1.shPID=82266,2.shPID=82267),可以看出,两个脚本是分成两个进程运行的。

exec

exec方式运行的结果是,2.sh执行完成后,不再回到1.sh。运行顺序为1-2。从pid值看,两者是在同一进程PID=82287中运行的。

source

source方式的结果是两者在同一进程里运行。该方式相当于把两个脚本先合并再运行。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对#的支持。如果你想了解更多相关内容请查看下面相关链接

您可能感兴趣的文章:Shell中exit和return的区别讲解使用shell脚本来给mysql加索引的方法干掉一堆mysql数据库,仅需这样一个shell脚本(推荐)linuxshell之通过标识测试文件系统属性的方法示例linuxshell中if的各种判断linuxshell之pushd、popd和dirs的使用讲解linuxshell之控制台打印各种颜色字体和背景的实现方法shell脚本实现监控某个进程意外停止后拉起进程使用shell脚本每天对MySQL多个数据库自动备份的讲解使用shell来发tcp包的方法

推荐阅读
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 服务器上的操作系统有哪些,如何选择适合的操作系统?
    本文介绍了服务器上常见的操作系统,包括系统盘镜像、数据盘镜像和整机镜像的数量。同时,还介绍了共享镜像的限制和使用方法。此外,还提供了关于华为云服务的帮助中心,其中包括产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题和视频帮助等技术文档。对于裸金属服务器的远程登录,本文介绍了使用密钥对登录的方法,并提供了部分操作系统配置示例。最后,还提到了SUSE云耀云服务器的特点和快速搭建方法。 ... [详细]
  • VueCLI多页分目录打包的步骤记录
    本文介绍了使用VueCLI进行多页分目录打包的步骤,包括页面目录结构、安装依赖、获取Vue CLI需要的多页对象等内容。同时还提供了自定义不同模块页面标题的方法。 ... [详细]
  • 如何用JNI技术调用Java接口以及提高Java性能的详解
    本文介绍了如何使用JNI技术调用Java接口,并详细解析了如何通过JNI技术提高Java的性能。同时还讨论了JNI调用Java的private方法、Java开发中使用JNI技术的情况以及使用Java的JNI技术调用C++时的运行效率问题。文章还介绍了JNIEnv类型的使用方法,包括创建Java对象、调用Java对象的方法、获取Java对象的属性等操作。 ... [详细]
  • 本文介绍了关系型数据库和NoSQL数据库的概念和特点,列举了主流的关系型数据库和NoSQL数据库,同时描述了它们在新闻、电商抢购信息和微博热点信息等场景中的应用。此外,还提供了MySQL配置文件的相关内容。 ... [详细]
  • Linux环境变量$PATH的作用及使用方法
    本文介绍了Linux环境变量$PATH的作用及使用方法。$PATH是一个由多个目录组成的变量,用冒号分隔。当执行一个指令时,系统会按照$PATH定义的目录顺序搜索同名的可执行文件,如果有多个同名指令,则先找到的会被执行。通过设置$PATH变量,可以在任何地方执行指令,无需输入绝对路径。 ... [详细]
  • Ihaveaworkfolderdirectory.我有一个工作文件夹目录。holderDir.glob(*)>holder[ProjectOne, ... [详细]
  • MySQL多表数据库操作方法及子查询详解
    本文详细介绍了MySQL数据库的多表操作方法,包括增删改和单表查询,同时还解释了子查询的概念和用法。文章通过示例和步骤说明了如何进行数据的插入、删除和更新操作,以及如何执行单表查询和使用聚合函数进行统计。对于需要对MySQL数据库进行操作的读者来说,本文是一个非常实用的参考资料。 ... [详细]
  • PHP反射API的功能和用途详解
    本文详细介绍了PHP反射API的功能和用途,包括动态获取信息和调用对象方法的功能,以及自动加载插件、生成文档、扩充PHP语言等用途。通过反射API,可以获取类的元数据,创建类的实例,调用方法,传递参数,动态调用类的静态方法等。PHP反射API是一种内建的OOP技术扩展,通过使用Reflection、ReflectionClass和ReflectionMethod等类,可以帮助我们分析其他类、接口、方法、属性和扩展。 ... [详细]
  • 本文介绍了禅道作为一款国产开源免费的测试管理工具的特点和功能,并提供了禅道的搭建和调试方法。禅道是一款B/S结构的项目管理工具,可以实现组织管理、后台管理、产品管理、项目管理和测试管理等功能。同时,本文还介绍了其他软件测试相关工具,如功能自动化工具和性能自动化工具,以及白盒测试工具的使用。通过本文的阅读,读者可以了解禅道的基本使用方法和优势,从而更好地进行测试管理工作。 ... [详细]
author-avatar
忧伤的嫖客
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有