Linux中shell运⾏⽅式,linux脚本中⽗shell与⼦shell执⾏的⼏种
⽅式
本⽂主要介绍以下⼏个命令的区别:
shell
subshell
linux循环执行命令脚本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的命令。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。