在shell脚本中调用另一个脚本的三种不同方法(fork, exec, source)-转
- fork ( /directory/script.sh) :如果shell中包含执行命令,那么子命令并不影响父级的命令。在子命令执行完后再执行父级命令,子级的环境变量不会影响到父级。
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
1 #!/bin/bash 2 A=B 3 echo "PID for 1.sh before exec/source/fork:$$" 4 export A 5 echo "1.sh: \$A is $A" 6 case $1 in 7 exec) 8 echo "using exec…" 9 exec ./2.sh ; 10 source) 11 echo "using source…" 12 . ./2.sh ; 13 *) 14 echo "using fork by default…" 15 ./2.sh ; 16 esac 17 echo "PID for 1.sh after exec/source/fork:$$" 18 echo "1.sh: \$A is $A"
2.sh
1 #!/bin/bash 2 echo "PID for 2.sh: $$" 3 echo "2.sh get \$A=$A from 1.sh" 4 A=C 5 export A 6 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 $
相关推荐
当我在执行shell脚本时,它会启动一个叫子shell的进程。作为主shell的子进程,子shell将shell脚本中的命令作为批处理运行(因此称为“批处理进程”)。 在某些情况下,你也许想要知道运行中的子shell的PID。这个PID...
【】11a00d99b60c4e2eba3440b8aa3a6bdd【】linux_shell脚本编程_01认识shell,如何编写shell脚本和执行【】linux_shell脚本编程_02vivim简单的常用操作【】linux_shell脚本编程_03变量和数值运算,父shell和子shell的...
本文介绍的“非常简单的Shell菜单脚本”就是一种基础的Shell脚本应用,它创建了一个简单的菜单系统,使用户能够通过选择编号来执行不同的功能,实现了人机交互的“傻瓜式”操作。 首先,脚本通过`#!/bin/sh`行指定...
`3.6Shell Here Document(内嵌文档_立即文档).html`将解释Here Document的概念,这是一种方便的输入重定向方式,允许在脚本中直接插入多行文本,常用于创建配置文件或模拟用户输入。 5. **Shell关联数组** `...
10. **脚本调试**:`set -x`开启命令追踪,显示脚本执行的每个步骤;`set -v`开启命令回显,显示脚本中的每一行。 通过阅读和实践"shell脚本大全"中的例子,你可以逐步掌握这些概念,并学会如何编写自己的脚本来...
运行shell脚本有三种主要方式: 1. 添加执行权限:使用`chmod +x test1.sh`命令赋予脚本执行权限。 2. 使用解释器执行:通过`bash test1.sh`启动一个新的子进程来运行脚本。 3. 使用当前解释器执行:使用`source ...
先来说一下主要以下有几种方式: fork: 如果脚本有执行权限的话,path/to/foo.sh。如果没有,sh path/to/...运行的时候 terminal 会新开一个子 Shell 执行脚本 foo.sh,子 Shell 执行的时候, 父 Shell 还在。子 Shell
Shell提供了一些内部参数,这些参数提供了关于脚本执行环境的信息。常用的内部参数包括 `$0` (脚本名称)、`$#` (位置参数的数量)、`$*` (所有位置参数) 和 `$?` (最后一个命令的退出状态)。 **2.2 表达式比较、...
这种方式不需要文件有执行权限,因为它是作为shell的一部分运行的,而不是一个新的子进程。通常,当你需要立即更新环境变量(如通过修改`.bashrc`或`.bash_profile`)时,你会使用`source`。 2. **sh和bash命令**:...
在Shell脚本中,创建子Shell是一种常见的操作,它可以提供一个隔离的执行环境,使得在其中执行的命令和脚本不会影响到父Shell的状态。本文将详细解释Shell变量和创建子Shell的过程,并通过实例加深理解。 首先,...
本文将详细讲解在Shell脚本中调用其他Shell脚本的三种常见方法:`fork`、`exec`以及`source`,并提供实例以帮助理解它们的工作原理和应用场景。 1. **fork** `fork`是最常见的调用方式,它会在当前Shell环境中创建...
虽然没有列出具体的子文件名,但我们可以推测这个“bin”目录可能包含可执行的Shell脚本文件。在Linux或Unix系统中,"bin"目录通常用于存放可执行程序。因此,这些脚本可能已经过优化,可以直接运行,为用户提供即时...
了解这四种执行方式对于理解和优化shell脚本的运行至关重要。根据实际需求选择合适的执行方式,能够提高工作效率,减少不必要的麻烦。在编写和执行shell脚本时,务必注意权限设置、脚本内容的正确性和解释器的选择,...
2. 子shell:在脚本内部启动新的Shell实例,运行独立的任务。 3. 别名与函数:创建命令别名或函数,简化命令输入。 九、案例分析 "如何编写一个shell脚本.doc"文档可能包含具体的步骤和示例,教授如何从无到有地...
Shell脚本,全称为Bash Shell脚本,是Linux或Unix系统中的一种程序设计语言,它基于Shell命令行解释器,允许用户通过编写脚本来自动化一系列的系统操作。Shell脚本的编写对于日常的系统管理和自动化任务至关重要。...
在IT领域,Shell脚本是一种极其实用的工具,特别是在Linux和Unix系统中。Shell脚本是用Shell语言编写的程序,允许用户通过命令行界面自动化执行一系列操作。在这个名为"我的几个常用shell脚本"的压缩包中,包含了...
#### 三、Python 编写 Shell 脚本的基本方法 在使用 Python 编写 Shell 脚本时,我们需要掌握几个基本的技巧和概念: 1. **使用 os 模块**:Python 的 `os` 模块提供了一系列用于与操作系统交互的函数。例如,`os....
- **调试技巧**: 如设置set命令来追踪脚本执行过程,找出问题所在。 8. **脚本实践** - **实用脚本示例**: 书中会提供各种实际场景下的脚本案例,如系统维护、日志分析、文件备份等。 - **脚本设计原则**: 学习...
Shell脚本是一种文本文件,其中包含了Linux命令和控制结构,用于自动化一系列的系统操作。在本篇PDF中,作者详细介绍了如何编写、修改权限以及执行Shell程序,同时还讲解了在脚本中使用参数、变量和控制结构。 1. *...
Shell脚本是Linux系统中的强大工具,它允许用户通过编程的方式来自动化执行一系列命令,极大地提高了工作效率。这本书以其高清无水印的版面和精心编排的内容,被誉为学习Shell脚本的最佳资源。 本书覆盖了Shell脚本...