`
dxm1986
  • 浏览: 435008 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

linux:Shell中exec、source和shell script的区别

 
阅读更多

 

linux:Shell中exec、source和shell script的区别

分类: Linux 相关 614人阅读 评论(0) 收藏 举报

 

exec和source都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息。

bash shell的命令分为两类:外部命令和内部命令。外部命令是通过系统调用或独立的程序实现的,如sed、awk等等。内部命令是由特殊的文件格式(.def)所实现,如cd、history、exec等等。

在说明exe和source的区别之前,先说明一下fork的概念。

fork是linux的系统调用,用来创建子进程(child process)。子进程是父进程(parent process)的一个副本,从父进程那里获得一定的资源分配以及继承父进程的环境。子进程与父进程唯一不同的地方在于pid(process id)。

环境变量(传给子进程的变量,遗传性是本地变量和环境变量的根本区别)只能单向从父进程传给子进程。不管子进程的环境变量如何变化,都不会影响父进程的环境变量。

 

shell script:

有两种方法执行shell scripts,一种是新产生一个shell,然后执行相应的shell scripts;一种是在当前shell下执行,不再启用其他shell。
新产生一个shell然后再执行scripts的方法是在scripts文件开头加入以下语句

#!/bin/sh

一般的script文件(.sh)即是这种用法。这种方法先启用新的sub-shell(新的子进程),然后在其下执行命令。
另外一种方法就是上面说过的source命令,不再产生新的shell,而在当前shell下执行一切命令。

 

source:

source命令即点(.)命令。

在bash下输入man source,找到source命令解释处,可以看到解释"Read and execute commands from filename in the current shell environment and ..."。从中可以知道,source命令是在当前进程中执行参数文件中的各个命令,而不是另起子进程(或sub-shell)。

 

exec:

在bash下输入man exec,找到exec命令解释处,可以看到有"No new process is created."这样的解释,这就是说exec命令不产生新的子进程。那么exec与source的区别是什么呢?

exec命令在执行时会把当前的shell process关闭,然后换到后面的命令继续执行。

分享到:
评论

相关推荐

    linux_shell编程集合

    在这个“Linux Shell编程集合”中,我们可以深入探讨以下几个关键知识点: 1. **Shell基础**:首先,我们需要了解什么是Shell,常见的Shell类型如Bash(Bourne-Again SHell)、Sh、Csh、Ksh等。Bash是目前最常用的...

    linux shell 脚本

    Linux Shell脚本是一种在Linux操作系统中执行的命令行脚本,它是通过Shell(如bash、sh、csh等)解释器来运行的程序。对于新手、中级用户乃至高级开发者来说,掌握Shell脚本能极大地提高工作效率,特别是对于系统...

    实验报告2_shell及shell编程.doc

    - 点命令(`.`或`source`):执行脚本中的命令,使变量和函数在当前shell环境中生效。 在实习内容中,实践了这些知识点,例如: - 修改`.bash_profile`以显示欢迎词和目录内容。 - 使用`history`和`alias`,并保存...

    主要shell内置命令

    Shell是Linux和Unix系统中的一种命令解释器,它允许用户通过命令行接口与操作系统交互。在Shell中,内置命令是直接由Shell执行的,而无需启动新的进程,这使得它们比外部命令更快、更有效率。以下是主要的Shell内置...

    Linux-Shell特殊字符和控制字符大全

    ### Linux Shell 特殊...以上列举了一些Linux Shell中的特殊字符和控制字符,这些字符对于理解和编写高效的Shell脚本至关重要。熟练掌握这些符号可以帮助开发者更加灵活地管理Linux系统,并有效地进行自动化任务处理。

    Linux_shell_编程入门(对外版091022)

    8. **进程控制**:学习如何在Shell脚本中启动、停止、监控和管理进程,如fork、exec、wait等。 9. **函数和参数**:了解如何在脚本中定义和调用函数,以及如何传递参数给脚本和函数。 10. **错误处理和调试**:...

    linux shell 命令, 脚本编程

    ### Linux Shell 命令与脚本编程知识点详解 #### 第一部分:Shell ##### 第1章:文件安全与权限 **1.1 文件** - **定义**:在Linux系统中,几乎所有东西都被视为文件,包括目录、设备等。 - **用途**:用于存储...

    linux_unix_shell

    在IT领域,Linux和Unix系统是服务器端操作系统的主导力量,而Shell编程则是这些系统中的核心工具,它为用户提供了与操作系统交互的强大方式。本资源包"linux_unix_shell"专注于介绍如何高效地使用Shell进行编程,...

    linux shell 编程2

    - **shell内置命令**:如`source`用于执行脚本中的命令,`read`从标准输入读取数据,`exec`替换当前Shell进程执行新命令。 - **脚本调试**:`set -x`开启命令执行跟踪,`set -v`显示所有读取的脚本行。 4. **案例...

    学习shell的13个难点

    6. exec与source的区别:exec命令在Shell中用于执行文件中的命令,但不会启动新的shell进程,而是用执行的程序替换当前的shell进程。而source命令则用于在当前shell环境中执行文件中的命令,它不会创建新的子shell...

    Shell十三问-ChinaUnix精华贴整理

    5. exec与source的差别:exec命令用于替换当前Shell进程,而source命令则是在当前Shell进程中执行脚本,并不会产生新的Shell进程。 6. 小括号(())与大括号({})的差别:小括号用来创建子Shell来执行命令,而大...

    shell编程13问

    - **exec与source**:exec命令用于启动新的程序替换当前shell,而source命令则用于在当前shell环境中执行脚本。 - **命令组()与{}**:圆括号()和花括号{}在Shell脚本中用于命令的分组,但它们的行为略有不同。 - *...

    Shell 十三问(SHELL 13Q)

    - **`source`**:用来在当前Shell环境中执行脚本,使得脚本中的变量和函数定义可以在当前Shell环境中使用。 #### 七、`()`与`{}`的区别 - **`()`**:用于创建子Shell环境,在括号内的命令会在一个新的子Shell中...

    关于linux日常使用的shell命令

    在 Linux 操作系统中,Shell 命令是用户与操作系统交互的重要方式之一。掌握常用的 Shell 命令对于提高工作效率、解决实际问题至关重要。本文将详细介绍标题及描述中提及的一些关键知识点。 #### 一、目录与文件...

    Shell编程初步

    然后可以用`.`(或`source`)来直接在当前Shell中运行,或用`./script.sh`在新的子Shell中运行。 通过深入学习这些基础概念和实践,你将能够编写出解决实际问题的Shell脚本,大大提高工作效率。每个PDF文件都可能...

    shell十三问

    exec命令用来执行一个程序,并用该程序替换当前的shell进程,而source是使shell脚本中的命令在当前shell环境中执行,不创建新的子shell。 七、( )与{ }的不同 圆括号()用于创建子shell,其中的命令会在一个新的...

    Linux命令行与shell脚本编程大全案例 (2).zip

    3. **命令执行**: 在脚本中,可以使用`echo`输出文本,`source`或`.`执行其他脚本,`exec`替换当前进程,`command`执行外部程序。 4. **条件表达式与测试**: `test`或`[`命令用于检查文件属性、比较值或执行算术...

    Shell十三问.pdf

    Shell 和 Carriage 在这里可能指的是 Shell 语言中的两个概念,但根据上下文来看,这似乎是指向某个特定场景或技术细节。通常情况下,Shell 与 Carriage 并无直接关联。如果此处提及的“Carriage”是指 carriage ...

    Linux新手生存笔记[10]——shell脚本基础3-函数及常用命令.pdf

    在Linux世界中,Shell脚本是一种强大的自动化工具,它允许用户编写一系列命令来完成复杂的任务。本篇笔记主要探讨了Shell脚本中的函数定义、参数传递、标准输入/输出(IO)、脚本调试以及一些常用的内置命令。 1. *...

    bash shell

    - Bash 是 GNU/Linux 和 MacOS X 的主要 shell。 - 支持版本号为 3.1。 - 可在 Solaris 上使用,并且几乎可以在任何其他 Unix 系统上轻松编译。 - **功能概览**: - 历史回顾 - 特性概述 - 启动 shell - 语法 ...

Global site tag (gtag.js) - Google Analytics