Shell中exec、source和shell script的区别

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情
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关闭,然后换到后面的命令继续执行。

参考文档
[1]  http://www.study-area.org/cyril/scripts/scripts/node1.html
[2]  http://www.freeos.com/guides/lsst/ 
开关电源|控制方式PWM、PFM、混合调制 频率调制器根据误差放大器的输出大小来改变方波信号的频率,若负载电流突然增加,输出电压 Vout随之下降,反馈电压 VFB 减小,此时误 差放大器的输出增高,频率调制器输出方波信号的频率增大,增加电感充电次数;若负载电流突然增加,输出电压Vom随之下降,反馈电压Vr减小,此时误差放大器的输出增高,PWM比较器输出方波信号的占空比增大,增加电感充电时间:若负载电流突然下降,PWM比较器输出方波信号的占空比减小,减少电感充电时间,从而稳定输出电压。它是在固定开关频率下,通过改变脉冲宽度来调节占空比的。 阅读详情

相关推荐

从 0 搭建一个智能问答工单系统:低代码 + 大模型的实战融合方案

企业智能问答工单系统解决方案:通过橙武低代码平台集成DeepSeek大模型,实现自动化工单处理与智能问答。系统能自动匹配知识库、分类工单,支持多渠道接入,显著提升响应效率(答复时间从12小时降至5分钟)。采用MySQL8表结构设计,结合向量数据库实现语义搜索,客服人力需求减少70%。系统支持知识库持续优化,AI答复满意度达88%,助力企业低成本构建智能客服中台。

欢迎来到我的CSDN博客!我专注于技术创新和数字化转型,特别是在低代码平台、人工智能和大数据分析领域的探索与应用。通过深入分析各种行业案例,帮助企业加速数字化进程,提升运营效率与创新能力。在这里,您将找到关于低代码平台、AI技术、数据分析与 1527

Bash基础——顺序执行命令

首先,值得提一下的是,在Bash里,最小的执行单位应该是pipeline. Bash支持对pipelines进行组合,产生顺序、条件、循环等结构。每个pipeline在其自己的subshell中执行,有自己的PID. 但是为了方便,在这里介绍顺序、条件、循环结构时,不刻意强调是由pipeline组成,依旧以命令(command)视为基本单元 顺序结构 用;分隔的顺序结构 $ command1;command2 以;分隔的命令按顺序执行。 Shell会依次等待每个命令执行终止,即每个命令都在自己的subsh

zjysource的专栏 3313

LVS 负载均衡面试题及参考答案

什么是 LVS 负载均衡?它的主要作用是什么? LVS(Linux Virtual Server)是一个基于 Linux 内核的开源负载均衡项目。它通过将请求流量按照一定的算法分发到后端的多个真实服务器(Real Server)上,从而实现负载均衡的功能。 从原理上来说,LVS 工作在网络层传输层之间。当客户端发起请求时,请求首先到达 LVS 服务器,LVS 会根据预先设定的规则算法,比如轮询(Round - Robin)、加权轮询(Weighted Round - Robin)、最少连

大模型大数据攻城狮的专栏 1442

flume学习05---Exec Source

Exec SourceExec Source在启动时运行给定的Unix命令,并期望进程在标准输出上产生连续的数据(除非属性logStdErr设置为true,否则stderr将被丢弃)。 如果进程由于任何原因退出,source也会退出,并且不会生成更多数据。 这意味着诸如cat [named pipe]或tail -F [file]之类的配置将产生期望的结果,其中日期可能不会 - 前两个命令产生数据流

chbxw 6964

Linuxexec命令相关

Linuxexec命令相关: execsource都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息。   bash shell的命令分为两类:外部命令内部命令。外部命令是通过系统调用或独立的程序实现的,如sed、awk等等。内部 命令是由特殊的文件格式(.def)所实现,如cd、history

LiuX 10万+

shellexec解析

  参考:《linux命令、编辑器与shell编程》 《unix环境高级编程》   execsource都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息。 bash shell的命令分为两类:外部命令内部命令。外部命令是通过系统调用或独立的程序实现的,如sed、awk等等。内部命令是由特殊的...

weixin_30588675的博客 948

shellexecsource,fork 简析

相关概念介绍: 1.内部命令外部命令 bash shell的命令分为两类:外部命令内部命令。外部命令是通过系统调用或独立的程序实现的,如sed、awk等等。内部命令是由特殊的文件格式(.def)所实现,如cd、history、exec等等。 execsource都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息。 2.fork的概念   fork是linux的系统调用,用来创建子进程...

sd4493091的博客 880

linux:Shellexecsourceshell script区别

execsource都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息。bash shell的命令分为两类:外部命令内部命令。外部命令是通过系统调用或独立的程序实现的,如sed、awk等等。内部命令是由特殊的文件格式(.def)所实现,如cd、history、exec等等。在说明exesource区别之前,先说明一下fork的概念。fork是linux的系统调用,用来创建子进程(child process)。

求是鹰的专栏 1万+

execsource以及bash区别

bash shell中,sourceexec以及sh都可以用来执行shell script,但是它们的差别在哪里呢? sh:父进程会fork一个子进程,shell script在子进程中执行 source:在原进程中执行,不会fork子进程 exec:在原进程中执行,但是同时会终止原进程 注:使用export会把父进程中的变量向子进程中继承,但是反过来却

huli870715的专栏 1万+

shellsourcesh script区别

原文地址:http://blog.163.com/shi_shun/blog/static/237078492011112643525868/   execsource都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息。 bash shell的命令分为两类:外部命令内部命令。外部命令是通过系统

雜貨鋪 1125

source exec区别

source exec区别   2011-05-12 10:22:19|  分类: shell编程 |字号 订阅 来自shell十三问: 问题的提出: cd /etc/aa/bb/cc可以执行,但是把这条命令写入shellshell不执行!这是什幺原因呀! 先让我们了解一下行程(process)的观念好了。 首先,我们所执行的任何程序,都是由父行程(paren

283

Linuxexec命令相关:

execsource都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息。   bash shell的命令分为两类:外部命令内部命令。外部命令是通过系统调用或独立的程序实现的,如sed、awk等等。内部 命令是由特殊的文件格式(.def)所实现,如cd、history、exec等等。   在说明exe...

renzhentinghai的博客 1万+

(转)linux exec与重定向

原文:http://xstarcd.github.io/wiki/shell/exec_redirect.html linux exec与重定向 execsource都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息。 bash shell的命令分为两类:外部命令内部命令。外部命令是通过系统调用或...

weixin_30685047的博客 133

执行shell脚本三种方法的区别:(sh、execsource

一、概念对比 sh 方式 使用$ sh script.sh执行脚本时,当前shell是父进程,生成一个子shell进程,在子shell中执行脚本。脚本执行完毕,退出子shell,回到当前shell。 ./script.sh与 sh script.sh等效。 source方式 使用$ source script.sh方式,在当前上下文中执行脚本,不会生成新的进程。脚本执行完毕,回到当前shell...

z1026544682的专栏 2894

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

fork  ( /directory/script.sh) fork是最普通的, 就是直接在脚本里面用/directory/script.sh来调用script.sh这个脚本. 运行的时候开一个sub-shell执行调用的脚本,sub-shell执行的时候, parent-shell还在。 sub-shell执行完毕后返回parent-shell. sub

David_xtd的专栏 1481

linux fork脚本,shell调度脚本的三种不同方法(fork, exec, source)

fork:/dir/script.shfork是最普通的, 就是直接在脚本里面用/dir/script.sh来调用script.sh这个脚本。运行的时候开一个sub-shell执行调用的脚本,sub-shell执行的时候, parent-shell还在。sub-shell执行完毕后返回parent-shell。sub-shell从parent-shell继承环境变量,但是sub-shell中的环境...

weixin_30054007的博客 442

linux source区别,linuxsource、sh、bash、./有什么区别

linux里,source、sh、bash、./都可以执行shellscript文件,那它们有什么不同吗?1、sourcesourcea.sh在当前shell内去读取、执行a.sh,而a.sh不需要有”执行权限”source命令可以简写为”.”比如:.a.sh注意:中间是有空格的。2、sh/bashsha.shbasha.sh都是打开一个subshell去读取、执行a.sh,而a.sh不需要有...

weixin_30700123的博客 334
上一篇: Java编程中防止http链接僵死的处理
chaosl
博客等级 码龄19年 0粉丝 2原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值