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

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的命令。

Linux中shell运行方式,linux脚本中父shell与子shell 执行的几种方式相关推荐

  1. 在Shell或Bat脚本中激活conda环境

    转自:https://heary.cn/posts/%E5%9C%A8Shell%E6%88%96Bat%E8%84%9A%E6%9C%AC%E4%B8%AD%E6%BF%80%E6%B4%BBcon ...

  2. 我使用过的Linux命令之trap - 在脚本中处理信号

    用途说明 trap是一个shell内建命令,它用来在脚本中指定信号如何处理.比如,按Ctrl+C会使脚本终止执行,实际上系统发送了SIGINT信号给脚本进程,SIGINT信号的默认处理方式就是退出程序 ...

  3. 如何在linux编写perl脚本,关于linux:如何在perl脚本中插入awk命令?

    我想在脚本中添加此awk命令,但始终出现错误. 我已放入"",但仍然出现错误. system("awk -F"\t" '{ for ( i=1; i& ...

  4. linux scp 输入密码,scp 在脚本中使用输入密码的解决方法

    以前用脚本scp文件时,都是以.ssh打通为基础的. 但是在脚本中使用scp在机器之间拷贝文件,输入密码成为问题. 第一种方法,用到了expect. 脚本如下: #! /usr/bin/expect ...

  5. linux下安装mysql8(基于yum安装和mysql安装包离线安装两种方式)

    试验环境: centos7 x64 最小化安装 mysql80-community-release-el7-3.noarch.rpm 或mysql-8.0.17-linux-glibc2.12-x86 ...

  6. linux su root 免密码,Ubuntu 18.04.2切换到root用户的三种方式及设置免密码操作

    本文介绍在Ubuntu 18.04.2系统中切换root用户的三种方式及在Ubuntu 18.04.2系统中设置普通用户切换root用户免密码操作. Ubuntu 18.04.2系统中切换root用户 ...

  7. eclipse中run运行不了_Springboot专辑:运行 Spring Boot 应用的 3 种方式!

    一:在 IDE 中运行 在 Eclipse.IDEA 中直接运行,又有以下两种方式. jar 包方式 Spring Boot 默认采用 jar 包内嵌 Tomcat.Jetty 等 Server 的方 ...

  8. IOS中延时执行的几种方式的比较

    本文列举了四种延时执行某函数的方法及其一些区别.假如延时1秒时间执行下面的方法. - (void)delayMethod { NSLog(@"execute"); } 1.perf ...

  9. [shell问答录]:命令、进程、子shell...

    2019独角兽企业重金招聘Python工程师标准>>> 前些天在CU上讨论一个统计正在执行的脚本数量的问题过程中,发现自己对于shell如何执行命令方面了解还是甚少,惭愧惭愧...期 ...

最新文章

  1. Pytorch中多GPU训练指北
  2. java拼接字符串 判断内容_java--字符串拼接比较
  3. SWFUpload上传文件组件,跨域上传文件
  4. UML图系列——UML概要
  5. 汇编语言 段前缀的使用 复制内存单元数据到指定位置
  6. db设计专用excel_工程师必备:硬件EMC设计规范
  7. 8 操作系统第二章 进程管理 信号量 PV操作 用信号量机制实现 进程互斥、同 步、前驱关系
  8. [转载] Python中的Phyllotaxis模式| 算法植物学的一个单位
  9. 工厂模式在 Calendar 类中的应用
  10. WPF DataGridComboBoxColumn使用(绝对良心版)
  11. 动易 dw css不对,动易模板制作示.doc
  12. 夜曲歌词 拼音_《夜曲》的歌词 - 歌手:周杰伦 (Jay Chou)
  13. webMethods入门简介
  14. 韩顺平java学习day1
  15. Stm32cubeIDE1.8 增加代码补齐
  16. Android post ---花两天事件踩一个联网坑
  17. “新基建”背景下,智慧灯杆产业面临的问题及思考
  18. 管理3.0 学习词汇笔记 一 树
  19. Java 百万数据秒级导出到Excel中
  20. 从零开始学WEB前端——JavaScript流程控制语句

热门文章

  1. 读后感:软件测试经验与教训
  2. JS格式化数字保留两位小数点—toFixed()
  3. BZOJ 4719--天天爱跑步(LCA差分)
  4. ADO.NET知识点
  5. python--DenyHttp项目(1)--socket编程:客户端与服务器端
  6. POJ3264Balanced Lineup(最基础的线段树)
  7. 对象指针与this指针
  8. poj 1056 IMMEDIATE DECODABILITY
  9. c++ public private protect
  10. 3 - Spring AOP