`

Shell中exec、source和shell script的区别

 
阅读更多

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

 

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

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

 

forklinux的系统调用,用来创建子进程(child process)。子进程是父进程(parent process)的一个副本,从父进程那里获得一定的资源分配以及继承父进程的环境。子进程与父进程唯一不同的地方在于pidprocess 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命令不产生新的子进程。那么execsource的区别是什么呢?

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

分享到:
评论

相关推荐

    shell十三问

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

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

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

    学习shell的13个难点

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

    hbase-shell批量命令执行脚本的方法

    exec $HBASE_HOME/bin/hbase shell <<EOF truncate 'tracker_total_apk_fact_zyt' major_compact('t_abc') disable 't_abc' drop 't_abc' create 't_abc', 'info' EOF 以上这篇hbase-shell批量命令执行脚本的...

    shell编程13问

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

    Shell十三问 绝对经典 本人自测

    以下是对标题和描述中提到的“Shell十三问”的详细解答: 1. **简介** Shell是操作系统提供的一种命令解释器,它将用户的输入解析成操作系统可以理解的命令,同时也支持编写脚本执行一系列命令。 2. **为何叫做 ...

    shell-13-questions.pdf

    在Shell脚本中,source与exec的差别在于,source命令会在当前Shell环境中执行脚本,而exec会在新的进程中替换当前Shell。 在结构化命令方面,()用于命令组,{}用于代码块。对于算术扩展,$(())用于整数运算,而$()...

    主要shell内置命令

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

    Shell十三问-ChinaUnix精华贴整理2007.pdf

    &&和||分别表示逻辑与和逻辑或,在Shell脚本中用于控制流程的分支和条件判断。熟练运用这两个运算符,可以构建出更复杂的逻辑结构。 ### 12. >与<的输入输出重定向 >和<分别用于输出重定向和输入重定向,使Shell...

    Shell十三问-ChinaUnix精华贴整理

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

    Shell十三问.pdf

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

    理解面向操作命令的接口SHELL

    5. 使用`source script`命令测试脚本,或者通过`chmod a+x script`赋予脚本执行权限,然后使用`./script`执行。 **Bash关键字和功能** - `echo`:在终端上打印字符串。 - 特殊变量(如 `$1` 至 `$9`):保存脚本的...

    详解Shell脚本中调用另一个Shell脚本的三种方式

    本文将详细讲解在Shell脚本中调用其他Shell脚本的三种常见方法:`fork`、`exec`以及`source`,并提供实例以帮助理解它们的工作原理和应用场景。 1. **fork** `fork`是最常见的调用方式,它会在当前Shell环境中创建...

    linux shell 脚本

    Linux Shell脚本是一种在Linux操作系统中执行的命令行脚本,它是通过Shell(如bash、sh、csh等)...在"Linux Shell脚本攻略.pdf"这本书中,你可能将找到详细的教程和实例,帮助你从初学者逐渐成长为Shell脚本的高手。

    SHELL_十三问.pdf

    在Shell脚本中,`var=value`用于声明和初始化变量,而`export`关键字用于将变量声明为环境变量,这意味着该变量不仅在当前Shell中可用,也可以被其子Shell继承。 #### 6. exec与source的差异 `exec`命令用于在当前...

    C Shell 教程

    - `source`:读取并执行文件中的命令。 - `limit`:设置资源限制。 - `dirs`:操作目录栈。 - `echo`:打印文本到标准输出。 - `time`:显示命令的执行时间。 - `nice`:设置进程的优先级。 - `rehash`:重新...

Global site tag (gtag.js) - Google Analytics