本文主要用来区别一下几个命令【其实要真正的区别这些概念还应该深入讨论进程的相关知识,这里暂且不表,待续~】

shell
subshell
source
$(commond)
` commond`
exec

linux执行Scripts有两种方式,主要区别在于是否建立subshell
1.source filename OR . filename
不创建subshell,在当前shell环境下读取并执行filename中的命令,就相当于顺序执行filename里面的命令
2.bash filename OR ./filename
创建subshell,此命令是在当前bash环境下再新建一个子shell执行filename中的命令

子shell继承fushell的变量,但子shell不会改变父shell的变量,除非使用export【注释:有没有想过,这和命名空间是相似的道理,甚至和c中的函数也有些类似】
子Shell能够从父Shell继承得来的属性如下:
当前工作目录
环境变量
标准输入、标准输出和标准错误输出
所有已打开的文件标识符
忽略的信号
子Shell不能从父Shell继承得来的属性,归纳如下:
除了环境变量和.bashrc文件中定义变量之外的Shell变量
未被忽略的信号处理

$(commond)
这个的作用是让命令在子shell中执行
` commond`
也是用来执行命令和,$()差不多

exec commond
它替换了当前的shell却没有创建一个新的进程。进程的pid保持不变, it replaces the shell without creating a new process【如果想了解透彻应该去看c的进程】
那么它的作用是什么???
shell的内建命令exec将并不启动新的shell,而是用要被执行命令替换当前的shell进程,并且将老进程的环境清理掉,而且exec命令后的其它命令将不再执行。
因此,如果你在一个shell里面,执行exec ls那么,当列出了当前目录后,这个shell就自己退出了,因为这个shell进程已被替换为仅仅执行ls命令的一个进程,执行结束自然也就退出了。为了避免这个影响我们的使用,一般将exec命令放到一个shell脚本里面,用主脚本调用这个脚本,调用点处可以用bash a.sh,(a.sh就是存放该命令的脚本),这样会为a.sh建立一个sub shell去执行,当执行到exec后,该子脚本进程就被替换成了相应的exec的命令。
exec 命令:常用来替代当前 shell 并重新启动一个 shell,换句话说,并没有启动子 shell。使用这个命令的时候,放在内存中的变量恐怕就要被清除了。但exec 在对文件描述符进行操作的时候,也只有在这时,exec 不会覆盖你当前的 shell 环境。

shell与subshell与执行脚本的几种方式相关推荐

  1. Linux 开机自动执行脚本的两种方式

    前言 很多情况下,我们都希望服务重启之后,很多应用都能自动启动,那么除了linux 提供的自启动配置之外,我们也可以在开机之后,通过指定 一些脚本的具体路径,或者是某个服务的启动命令具体路径,来进行服 ...

  2. linux脚本简单定时,shell之定时周期性执行脚本的方法示例

    示例 1.编写测试脚本脚本 time .sh $ cat time.sh #! /bin/bash echo $(date +%s) >> /home/ocean/out.txt 保存完毕 ...

  3. linux exec 脚本之家,详解Shell脚本中调用另一个Shell脚本的三种方式

    主要以下有几种方式: Command Explanation fork 新开一个子 Shell 执行,子 Shell 可以从父 Shell 继承环境变量,但是子 Shell 中的环境变量不会带回给父 ...

  4. Linux开机自动化执行脚本的四种方法(真实案例分享)

    Linux开机自动化执行脚本的四种方法(真实案例分享) 最近眼睛有点疼,可能是长时间面对电脑屏幕的原因罢.百度后安装了Redshift这款护眼工具,只要事先写好配置文件它会根据你的地理位置自动调节屏幕 ...

  5. mysql命令行执行复杂sql_mysql命令行中执行sql的几种方式总结

    1.直接输入sql执行 MySQL> select now(); +---------------------+ | now() | +---------------------+ | 2013 ...

  6. mysql 执行cmd,mysql命令行中执行sql的几种方式总结

    1.直接输入sql执行 MySQL> select now(); +---------------------+ | now() | +---------------------+ | 2013 ...

  7. mysql的调用有哪三种方式_MySQL数据库之mysql命令行中执行sql的几种方式总结

    本文主要向大家介绍了MySQL数据库之mysql命令行中执行sql的几种方式总结 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 1.直接输入sql执行 MySQL> se ...

  8. Unity编辑器开发——通过模板创建Lua脚本的两种方式(二)

    个人学习笔记,如有错误.疑问.建议,欢迎留言. 本文有关代码转载自:Unity3D 扩展编辑器实现创建Lua脚本 - 知乎 (zhihu.com) 声明:本文转载已取得原文章作者同意,有兴趣的可以关注 ...

  9. python3解释器执行not 1 and 1_编程语言的分类,python解释器多版本共存.执行python的两种方式,变量,用户与程序交互...

    一.编程语言的分类? 机器语言:直接使用二进制指令编程,直接操作硬件,必须考虑硬件细节. 汇编语言:用简写的英文标识符取代二进制去编写程序,直接操作硬件,必须考虑硬件细节. 高级语言:通过人类能够理解 ...

最新文章

  1. python3实现四元数到普通角度的转换程序
  2. python实现卡方(Chi-Squared Test)相关性检验
  3. 【转】Android应用开发allowBackup敏感信息泄露的一点反思
  4. 《当幸福敲门》克里斯·加德纳
  5. 创建一个QT for Android的传感器应用应用程序(摘自笔者2015年将出的《QT5权威指南》,本文为试读篇)
  6. kafka是什么_终于知道Kafka为什么这么快了!
  7. java allocate_Java中volatile关键字的最全总结
  8. leetcode981. 基于时间的键值存储(treemap)
  9. python socket send_python socket 连续send,出现粘包问题
  10. 搜索 —— 启发式搜索 —— 模拟退火
  11. chap01 .net 基本框架介绍
  12. dreamweaver 正则表达式为属性值加上双引号_「前端篇」不再为正则烦恼
  13. OJ:一道考察多态的题目
  14. 移动端适配的基础知识
  15. HG255D网页摄像头配置
  16. 重放攻击与中间人攻击
  17. Quartus破解步骤及常见错误解决方法
  18. sougou ubuntu 优麒麟_Ubuntu20.04LTS安装搜狗输入法
  19. 12张手绘图,我搞懂了微服务架构
  20. 进击的巨人有趣表情包

热门文章

  1. TextDetection文本检测数据集汇总
  2. centos7.x 通过yum方式安装java 1.8.0
  3. 1107班12月第5周 班级计划 为s1结业答辩做准备
  4. 事务演练 mysql
  5. 字符缓冲输入流 BufferedReader java
  6. linux-目录查询命令-目录内容查看-ls查询-tree查询-查询类容分类-不同颜色对应不同类型
  7. bootstrap-模态框
  8. 木桶布局 原理与实现
  9. kubernetes之node 宕机,pod驱离问题解决
  10. Ansible AdHoc playbook API + 动态生成Inventory +结果关注