Linux中shell运行方式,linux脚本中父shell与子shell 执行的几种方式
本文主要介绍以下几个命令的区别:
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 执行的几种方式相关推荐
- 在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 ...
- 我使用过的Linux命令之trap - 在脚本中处理信号
用途说明 trap是一个shell内建命令,它用来在脚本中指定信号如何处理.比如,按Ctrl+C会使脚本终止执行,实际上系统发送了SIGINT信号给脚本进程,SIGINT信号的默认处理方式就是退出程序 ...
- 如何在linux编写perl脚本,关于linux:如何在perl脚本中插入awk命令?
我想在脚本中添加此awk命令,但始终出现错误. 我已放入"",但仍然出现错误. system("awk -F"\t" '{ for ( i=1; i& ...
- linux scp 输入密码,scp 在脚本中使用输入密码的解决方法
以前用脚本scp文件时,都是以.ssh打通为基础的. 但是在脚本中使用scp在机器之间拷贝文件,输入密码成为问题. 第一种方法,用到了expect. 脚本如下: #! /usr/bin/expect ...
- linux下安装mysql8(基于yum安装和mysql安装包离线安装两种方式)
试验环境: centos7 x64 最小化安装 mysql80-community-release-el7-3.noarch.rpm 或mysql-8.0.17-linux-glibc2.12-x86 ...
- linux su root 免密码,Ubuntu 18.04.2切换到root用户的三种方式及设置免密码操作
本文介绍在Ubuntu 18.04.2系统中切换root用户的三种方式及在Ubuntu 18.04.2系统中设置普通用户切换root用户免密码操作. Ubuntu 18.04.2系统中切换root用户 ...
- eclipse中run运行不了_Springboot专辑:运行 Spring Boot 应用的 3 种方式!
一:在 IDE 中运行 在 Eclipse.IDEA 中直接运行,又有以下两种方式. jar 包方式 Spring Boot 默认采用 jar 包内嵌 Tomcat.Jetty 等 Server 的方 ...
- IOS中延时执行的几种方式的比较
本文列举了四种延时执行某函数的方法及其一些区别.假如延时1秒时间执行下面的方法. - (void)delayMethod { NSLog(@"execute"); } 1.perf ...
- [shell问答录]:命令、进程、子shell...
2019独角兽企业重金招聘Python工程师标准>>> 前些天在CU上讨论一个统计正在执行的脚本数量的问题过程中,发现自己对于shell如何执行命令方面了解还是甚少,惭愧惭愧...期 ...
最新文章
- Pytorch中多GPU训练指北
- java拼接字符串 判断内容_java--字符串拼接比较
- SWFUpload上传文件组件,跨域上传文件
- UML图系列——UML概要
- 汇编语言 段前缀的使用 复制内存单元数据到指定位置
- db设计专用excel_工程师必备:硬件EMC设计规范
- 8 操作系统第二章 进程管理 信号量 PV操作 用信号量机制实现 进程互斥、同 步、前驱关系
- [转载] Python中的Phyllotaxis模式| 算法植物学的一个单位
- 工厂模式在 Calendar 类中的应用
- WPF DataGridComboBoxColumn使用(绝对良心版)
- 动易 dw css不对,动易模板制作示.doc
- 夜曲歌词 拼音_《夜曲》的歌词 - 歌手:周杰伦 (Jay Chou)
- webMethods入门简介
- 韩顺平java学习day1
- Stm32cubeIDE1.8 增加代码补齐
- Android post ---花两天事件踩一个联网坑
- “新基建”背景下,智慧灯杆产业面临的问题及思考
- 管理3.0 学习词汇笔记 一 树
- Java 百万数据秒级导出到Excel中
- 从零开始学WEB前端——JavaScript流程控制语句