zoukankan      html  css  js  c++  java
  • 小鸟初学Shell编程(三)脚本不同执行方式的影响

    执行命令的方式

    执行Shell脚本的方式通常有以下四种

    • 方式一:bash ./test.sh
    • 方式二:./test.sh
    • 方式三:source ./test.sh
    • 方式四:. ./test.sh

    执行方式的区别

    方式一bash方式执行脚本的话,会在当前的终端下面产生一个bash子进程来运行脚本,所以对当前的环境是没有影响的。

    [root@lincoding usr]# bash ./test.sh
    

    方式二./test.sh的方式运行,则脚本第一行声明是哪个Shell解释器就会产生哪个Shell解释器的子进程来运行脚本,如果声明的Shell解释器是bash,则与方式一类似。

    [root@lincoding usr]# ./test.sh
    

    方式三和方式四执行的时候,和上面的方式一和方式略有点不同。
    因为他执行的时候是通过当前的终端来执行Shell脚本的,不会产生子进程,所以会当前的环境是有影响的。

    [root@lincoding usr]# source ./test.sh
    [root@lincoding usr]# . ./test.sh
    

    执行方式的影响对比

    上述也提及到了方式一和方式二,由于是会产子进程来执行Shell脚本,所以对当前的环境是没有影响的;而方式二和方式三,是在当前的终端执行Shell脚本,所以是会对当前的环境是有影响的。

    举个栗子,编写一个切换目录的test.sh脚本,内容如下

    #!/bin/bash
    
    # 切换到tmp目录
    cd /tmp
    # 打印当前目
    pwd
    

    那么使用方式一执行test.sh脚本,其结果如下:

    [root@lincoding /]# bash test.sh 
    /tmp
    [root@lincoding /]# pwd
    /
    

    可以发现,使用方式一去执行脚本,不需要给予执行权限。

    方式二执行test.sh脚本,其结果如下:

    [root@lincoding /]# chmod u+x test.sh 
    [root@lincoding /]# ls -l test.sh 
    -rwxr--r--. 1 root root 64 Sep 26 18:34 test.sh
    [root@lincoding /]# ./test.sh 
    /tmp
    [root@lincoding /]# pwd
    /
    

    方式一和方式二执行完切换到/tmp目录的Shell脚本后,终端所在的目录没有变化,还是在/根目录,说明方式一和方式二的执行方式是对当前的环境是没有影响的。

    原因就是方式一和二执行Shell脚本时,会产生子进程来执行Shell脚本,当脚本执行结束后,子进程退出,回到了父进程,那么对当前所在的环境就不会产生影响。

    接下来看,方式三执行结果:

    [root@omp120 /]# source ./test.sh 
    /tmp
    [root@omp120 tmp]# pwd
    /tmp
    

    方式四执行结果:

    [root@omp120 /]# . ./test.sh 
    /tmp
    [root@omp120 tmp]# pwd
    /tmp
    

    从上面方式三和方式四的执行结果,可以发现,执行完切换到/tmp目录的Shell脚本后,当前的终端环境所在的目录已经被切换了到了/tmp目录,说明方式三和方式四的执行方式是对当前的环境是有影响的。


    小结

    方式一和方式二执行Shell脚本时,会产生子进程来执行Shell脚本,当脚本执行结束后,子进程退出,回到了父进程,那么对当前所在的环境就不会产生影响。

    而方式二和方式四是在当前环境执行Shell脚本,也就是在当前进程执行Shell脚本,其执行的结果就会影响当前的环境。

  • 相关阅读:
    1.NopCommerce下载与安装
    DLT(Direct Linear Transform)算法
    向量叉乘与叉乘矩阵
    最小二乘与最大似然估计之间的关系
    最小二乘法
    Levenberg-Marquardt迭代(LM算法)-改进Guass-Newton法
    Newton法(牛顿法 Newton Method)
    自己所有博客汇总
    Unity 预制体烘焙光影丢失,Unity2018 预制嵌套
    XmlException: Text node canot appear in this state
  • 原文地址:https://www.cnblogs.com/xiaolincoding/p/11601017.html
Copyright © 2011-2022 走看看