linux source bash ./ sh fork exec 的区别

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

在linux 里做一件事的方法往往有很多种,比如执行一个脚本的就有很多种方式,那么这些方式有什么区别呢?

首先,执行一个shell 脚本的方法有以下几种:source  sh  ./  bash ,那么这些方式有什么区别呢?它们的区别主要是在当前shell环境中运行还是另外开启一个子shell运行以及运行该shell对当前shell环境的影响。

1 source

source 是在当前shell环境下读取该文件的内容,并执行该脚本里的语句,运行结果会影响当前shell的环境,该命令并不会重新启动一个子进程去执行该脚本。

[make@master test]$ echo $$
16575
[make@master test]$ vi s
#!/usr/bin/env bash
echo $$

[make@master test]$ source s
16575
[make@master test]$

由此可见运行shell的进程和当前shell的进程是一样的。

如果修改了 /etc/profile 文件,想让修改立即生效用source命令即可:

source /etc/profile

  source  可以简写成 .


2 sh bash

这两个命令均是linux的命令,意思是开启一个子进程去执行该脚本。因为是子进程,所以该脚本并不会对当前环境产生影响。

3 ./

这个需要该脚本具有可执行的权限,也是开启一个子进程去执行脚本。上面讲述的几个命令均不需要脚本具有可执行权限。


4、fork、source、exec

  • 使用fork方式运行script时, 就是让shell(parent process)产生一个child process去执行该script,当child process结束后,会返回parent process,但parent process的环境是不会因child process的改变而改变的。
  • 使用source方式运行script时, 就是让script在当前process内执行, 而不是产生一个child process来执行。由于所有执行结果均于当前process内完成,若script的环境有所改变, 当然也会改变当前process环境了。
  • 使用exec方式运行script时, 它和source一样,也是让script在当前process内执行,但是process内的原代码剩下部分将被终止。同样,process内的环境随script改变而改变。

通常如果我们执行时,都是默认为fork的。

为了实践下,我们可以先建立2个sh文件,

1.sh

#!/bin/bash
A=B
echo "PID for 1.sh before exec/source/fork:$$"
export A
echo "1.sh: \$A is $A"
case $1 in
    exec)
        echo "using exec..."
        exec ./2.sh ;;
    source)
        echo "using source..."
        . ./2.sh ;;
    *)
        echo "using fork by default..."
        ./2.sh ;;
esac
echo "PID for 1.sh after exec/source/fork:$$"
echo "1.sh: \$A is $A"

2.sh

#!/bin/bash
echo "PID for 2.sh: $$"
echo "2.sh get \$A=$A from 1.sh"
A=C
export A
echo "2.sh: \$A is $A"


运行下面命令观察结果:

chmod +x 1.sh
chmod +x 2.sh
./1.sh fork
./1.sh source
./1.sh exec

参考:http://www.cnblogs.com/pcat/p/5467188.html




功率半导体器件选型指南:从GTO、GTR到MOSFET、IGBT的原理与应用 功率半导体器件是电力电子系统的核心,如同电路中的智能开关,负责电能的转换与控制。其工作原理基于半导体材料的导电特性,通过控制信号精确管理电路的通断。这类器件的技术价值在于提升能效、减小体积并增强系统可靠性,广泛应用于变频器、逆变器、开关电源及新能源领域。理解不同器件如MOSFET的雪崩能量与IGBT的损耗计算,是进行高效、可靠电路设计的基础。本文聚焦于GTO、GTR、MOSFET和IGBT这四类经典全控型器件的特性对比与选型策略,帮助工程师在具体项目中做出经济可靠的选择。 阅读详情

相关推荐

FPGA原型验证(八):SoC设计适配与实现策略

时钟门控在SoC设计中很常见,应该小心处理门控时钟,以成功地在FPGA上原型化SoC设计。现代FPGA综合工具在正确约束的情况下,可以自动处理大多数门控时钟。通过遵循本章中的指导方针,即使具有复杂时钟门控的SoC设计也可以得到处理,并成功地在FPGA上进行原型化。

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 461

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

一、fork ( /directory/script.sh) :如果shell中包含执行命令,那么子命令并不影响父级的命令,在子命令执行完后再执行父级命令。子级的环境变量不会影响到父级。fork是最普通的, 就是直接在脚本里面用/directory/script.sh来调用script.sh这个脚本.运行的时候开一个sub-shell执行调用的脚本,sub-shell执行的时候, parent-...

weixin_29047919的博客 566

基于Simulink的电动汽车电池管理系统热管理优化仿真

电动汽车电池管理系统(Battery Management System, BMS)中的热管理是确保电池性能、安全性和寿命的关键环节。温度过高或过低都会显著影响电池的工作效率和寿命,因此需要对电池组进行精确的热管理。基于MATLAB/Simulink的仿真平台可以用于建模和优化电池热管理系统,包括热分布预测、冷却策略设计以及热平衡控制等。本项目旨在构建一个完整的电动汽车电池热管理优化仿真模型,并通过仿真验证系统的性能。

xiaoheshang_123的博客 434

shellsh, exec, source, fork, ./的区别

https://www.cnblogs.com/cord/p/9226498.html shellsh, exec, source, fork, ./的区别 1,sh sh test.shsh是通过创建子进程(subshell)去执行脚本,父进程无法使用子进程中的变量,而子进程对环境变量的修改也不会影响到父进程。父进程中的局部变量子进程也无法使用,子进程会继承父进程的环境...

XCSDNJ2713的博客 516

linux fork脚本,在Shell脚本中调用另一个脚本的三种方式讲解

先来说一下主要以下有几种方式:fork: 如果脚本有执行权限的话,path/to/foo.sh。如果没有,sh path/to/foo.shexec: exec path/to/foo.shsource:source path/to/foo.shforkfork是最普通的, 就是直接在脚本里面用 path/to/foo.sh来调用 foo.sh这个脚本,比如如果是 foo.sh 在当前目录下,就...

weixin_29405191的博客 867

ShellShell脚本中调用另一个脚本的三种方式(fork/exec/source

先来说一下主要以下有几种方式: (1)fork: 如果脚本有执行权限的话,path/to/foo.sh。如果没有,sh path/to/foo.sh。 (2)exec: exec path/to/foo.sh (3)source: source path/to/foo.sh fork fork 是最普通的, 就是直接在脚本里面用 path/to/foo.sh 来调用 foo.sh 这个脚本,比如...

sinat_33408502的博客 1576

linuxlinuxfork()详解(实例讲解)|fork的运行机制

原文:https://blog.csdn.net/jason314/article/details/5640969#1536434-hi-1-50500-42d97150898b1af15ddaae52f91f09c2 一、fork入门知识 一个进程,包括代码、数据和分配给进程的资源。fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程, 也就是两个进程可以做完全相同的...

我的笔记本 1万+

linux 下的 source,sh,./三者区别

linux里,sourceshbash./都可以执行shell script文件,那它们有什么不同吗? ----------- 1、source source a.sh 在当前shell内去读取、执行a.sh,而a.sh不需要有"执行权限" source命令可以简写为"." . a.sh 注意:中间是有空格的。 2、sh/bash sh a.sh bash a...

Linux和Eda技术分享 7344

Linuxsourceshbash./有什么区别

Linux系统中,执行Shell脚本的方式有sourceshbash、以及./等多种,它们之间存在一些差异。下面将以更加通俗易懂的方式解释它们的区别及用法。

q742971636的博客 1855

linuxsource(.)、shbash./执行脚本的区别

linux里,source(.)、shbash./都可以执行shell script文件,那它们有什么不同吗? ------------------------------------ 1、source source a.sh 在当前shell内去读取、执行a.sh,而a.sh不需要有"执行权限" source命令可以简写为"." . a.sh 注意:中间是有空格的。  ...

k8888888888的专栏 529

linuxsourceshbash./有什么区别

linux里,sourceshbash./都可以执行shell script文件,那它们有什么不同吗? ----------- 1、source source a.sh 在当前shell内去读取、执行a.sh,而a.sh不需要有"执行权限" source命令可以简写为"." . a.sh 注意:中间是有空格的。   2、sh/bash sh a....

zhr1198 151

命令或脚本执行的方式

1、source命令   用法: source filename   作用: 在当前bash环境下读取并执行filename中的命令,该filename文件可以无"执行权限"    注:source命令通常用“.”来替代,如:source bash_profile   . bash_profile两者等效。    source(或点)命令通常用于重新执行刚修改的初始化文档。    source命令...

zhanshenyn的专栏 546

linuxsourceshbash./执行脚本的区别

点击打开链接 1、source命令用法:   source  FileName   作用:在当前bash环境下读取并执行FileName中的命令。该filename文件可以无"执行权限"   注:该命令通常用命令“.”来替代。   如:source .bash_profile     . .bash_profile两者等效。   source(或点)命

一世辛劳的专栏 8169

linuxfork, sourceexec区别

转:linuxfork, sourceexec区别 shell的命令可以分为内部命令和外部命令. 内部命令是由特殊的文件格式.def实现的,如cd,ls等.而外部命令是通过系统调用或独立程序实现的,如awk,sed. sourceexec都是内部命令.fork 使用 fork 方式运行 script 时, 就是让 shell(parent process) 产生一个 ...

die1643的博客 207

linux fork exec区别,对linuxsourcefork,exec的理解以及case的 使用

fork使用 fork 方式运行 script 时, 就是让 shell(parent process) 产生一个 child process 去执行该 script, 当 child process 结束后, 会返回 parent process,但 parent process 的环境是不会因 child process 的改变而改变的.source使用 source 方式运行 script ...

weixin_32742673的博客 341

linuxforkexec区别,linux shellforksourceexec区别

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

weixin_32040059的博客 438

linuxexecsource命令区别

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

京东放养的爬虫 1847

linuxsource.shbash./有什么区别

转载:https://www.cnblogs.com/pcat/p/5467188.html 1.source a.sh source可以简写为“.”,即. a.sh 注意中间有空格,在当前shell内去读取、执行a.sh,而a.sh不需要有"执行权限"。 2.sh a.shbash a.sh 都是打开一个subshell(子shell,由父shell产生)去读取、执行a.sh...

luciusvorenus 504

linux sourcesh,linuxsourceshbash./有什么区别(转)

add by zhj: 主要不同是,source是在当前shell中执行脚本,而sh, bash, ./是在当前shell的child shell中执行脚本在linux里,sourceshbash./都可以执行shell script文件,那它们有什么不同吗?-----------1、sourcesource a.sh在当前shell内去读取、执行a.sh,而a.sh不需要有"执行权限"so...

weixin_35995565的博客 341

linux:Shellexecsourceshell script的区别

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

求是鹰的专栏 1万+
上一篇: mysql lower_case_table_names 参数引起的一起事故
下一篇: java Queue 接口
touch_future
博客等级 码龄10年 3粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值