linux中父shell与子shell(脚本执行的几种方式)

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

本文主要介绍以下几个命令的区别:

  • shell
  • subshell
  • source
  • $ (commond)
  • `commond`

Linux执行Scripts有两种方式,主要区别在于是否建立subshell

1. source filename or . filename

不创建subshell,在当前shell环境下读取并执行filename中的命令,相当于顺序执行filename里面的命令

2. bash filename or ./filename

创建subshell,在当前bash环境下再新建一个子shell执行filename中的命令
子shell继承父shell的变量,但子shell不能使用父shell的变量,除非使用export
【备注:这和命名空间是相似的道理,甚至和c中的函数也有些类似】

子Shell从父Shell继承得来的属性如下:

  • 当前工作目录
  • 环境变量
  • 标准输入、标准输出和标准错误输出
  • 所有已打开的文件标识符
  • 忽略的信号

子Shell不能从父Shell继承的属性,归纳如下:

  • 除环境变量和.bashrc文件中定义变量之外的Shell变量
  • 未被忽略的信号处理
3. $ (commond)

它的作用是让命令在子shell中执行

4. `commond`

$(commond)差不多。
【这里的“ ` ”符号是撇(反单引号),不是单引号,是键盘上Esc按键下面的那个键。】

5. exec commond

替换当前的shell却没有创建一个新的进程。进程的pid保持不变
作用:
shell的内建命令exec将并不启动新的shell,而是用要被执行命令替换当前的shell进程,并且将老进程的环境清理掉,而且exec命令后的其它命令将不再执行。
当在一个shell里面执行exec ls后,会列出了当前目录,然后这个shell就自己退出了。(后续命令不再执行)
因为这个shell已被替换为仅执行ls命令的进程,执行结束自然也就退出了。
需要的时候可以用sub shell 避免这个影响,一般将exec命令放到一个shell脚本里面,用主脚本调用这个脚本,调用点处可以用bash a.sh(a.sh就是存放该命令的脚本),这样会为a.sh建立一个sub shell去执行,当执行到exec后,该子脚本进程就被替换成了相应的exec的命令。

参考博客
https://blog.csdn.net/lineuman/article/details/52443422

Linux中的shell是什么,怎么理解? 文章目录前言Linux中的shell是什么,怎么理解?01 shell概念02 shell 类型03 如何测试是否产生shell04 什么时候不产生shell05 什么时候产生shell05::01 管道命令05::02 执行shell脚本05::03 命令替换($())05::04 使用()组合05::05 放入后台运行的任务05::06 进程替换 前言   如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差,实在白嫖的 阅读详情

相关推荐

LinuxShell命令脚本

可以将Shell终端解释器当作人计算机硬件之间的“翻译官”,它作为用户Linux系统内部的通信媒介,除了能够支持各种变量参数外,还提供了诸如循环、分支等高级编程语言才有的控制结构特性。要想正确使用Shell中的这些功能特性,准确下达命令尤为重要。Shell脚本命令的工作方式有下面两种。:用户每输入一条命令就立即执行。:由用户事先编写好一个完整的Shell脚本Shell会一次性执行脚本中诸多的命令。

m0_74250610的博客 2959

Linux环境下shell使用

linux shell

m0_64886406的博客 6344

Linuxshell脚本

一、shell编写规范(1)代码规范/bin/bash #用于告知当前脚本使用的解释器路径#注释行 #用于解释脚本的作用,以及脚本中的变量代表的含义命令语句 #脚本主体2)文件命名规范文件名.sh # .sh是linuxshell文件的默认后缀。

qq_70242064的博客 2212

linux命令shell执行

Linux

weixin_73725158的博客 3602

linux启动shell,linux脚本shellshell 执行几种方式

本文主要介绍以下几个命令的区别:shellsubshellsource$ (commond)`commond`Linux执行Scripts有两种方式,主要区别在于是否建立subshell1. source filename or . filename不创建subshell,在当前shell环境下读取并执行filename中的命令,相当于顺序执行filename里面的命令2. bash filena...

weixin_35950078的博客 277

linux脚本shellshell 执行几种方式

本文主要介绍以下几个命令的区别: shell subshell source $ (commond) `commond`Linux执行Scripts有两种方式,主要区别在于是否建立subshell 1. source filename or . filename 不创建subshell,在当前shell环境下读取并执行filename中的命令,相当于顺序执行filename里面的命令 2....

开心的小包子 800

linux shell进程,linux脚本shellshell 执行几种方式

原标题:linux脚本shellshell 执行几种方式本文主要介绍以下几个命令的区别:shellsubshellsource$ (commond)`commond`Linux执行s有两种方式,主要区别在于是否建立subshell1. source filename or . filename不创建subshell,在当前shell环境下读取并执行filename中的命令,相当于顺序执行...

weixin_39595430的博客 513

linux执行shell脚本隐藏文件,linux脚本shellshell 执行几种方式

本文主要介绍以下几个命令的区别:shellsubshellsource$ (commond)`commond`Linux执行Scripts有两种方式,主要区别在于是否建立subshell1. source filename or . filename不创建subshell,在当前shell环境下读取并执行filename中的命令,相当于顺序执行filename里面的命令2. bash filena...

weixin_30930625的博客 534

Linuxshell运行方式,linux脚本shellshell 执行几种方式

本文主要介绍以下几个命令的区别:shellsubshellsource$ (commond)`commond`Linux执行Scripts有两种方式,主要区别在于是否建立subshell1. source filename or . filename不创建subshell,在当前shell环境下读取并执行filename中的命令,相当于顺序执行filename里面的命令2. bash filena...

weixin_30923447的博客 216

Shell - 03 深刻理解export关键字:再也不会犯迷糊

最近在被Shell脚本中的export关键字所困!记录一下,谈谈自己的理解。 0、预热:粗略了解Linux进程 1、Shell执行脚本几种方式 2.1 export实战 0、对Linux进程、进程一点点粗略了解 这里仅做我自己的简要理解,因为每一个深究都是一门大学问,没必要,但再次深深感觉到计算机基本组成原理知识的重要性。在此只是为了有助于利于export。 Linux是一个多用户...

神是念着倒 5948

shell学习系列之shellshell脚本执行几种方式

参考文章: 1)https://blog.csdn.net/NOStandby/article/details/82914930?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.none

daisy2001daisy的博客 2629

shell shell ,export 变量传递

当我们在一个 shell 里运行一个脚本程序时,该 shell 就会 fork 出一个新进程,从而启动了另一个命令解释器(脚本中第一行的 #!/bin/xxx 指定,如 bash shell)来解释运行我们这个脚本。也就是说,这个新进程是一个 shell,而之前的 shell 是个 shell 。 在我们所运行的脚本里,我们还可以启动新的 shell 进程,这些 shell 进程使

梦断代码的梦中 2万+
上一篇: ubuntu不同主机不同用户之间ssh免密码登录
下一篇: shell中各种括号的作用()、(())、[]、[[]]、{}
peacewind
博客等级 码龄11年 9粉丝 17原创
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值