zoukankan      html  css  js  c++  java
  • source命令的真谛

    来源:http://blog.csdn.net/jiankun_wang/article/details/4326489

    感谢原作者:)

    source命令,也就是那个“.”的作用就是执行一个脚本,难道它仅仅是执行一个脚步吗?当然不是。

    source命令确实是执行了一个脚本,但它和普通的执行一个脚本是有区别的,看看下面的输出:

    wangjk@wangjiankun:~/scripts$ echo $NAME                                      

    wangjk@wangjiankun:~/scripts$ echo $COLOR                            

    wangjk@wangjiankun:~/scripts$ cat -n soure_test.sh                              
         1  #!/bin/bash 
         2 
         3  echo "I will explain the command source" 
         4  echo 
         5 
         6  echo "Define the variable COLOR == black  and NAME == Wangjiankun" 
         7 
         8  export COLOR="black" 
         9  export NAME="Wangjiankun" 
        10 
        11  echo "$COLOR" 
        12  echo "$NAME" 
    wangjk@wangjiankun:~/scripts$ ls -l 
    total 4 
    -rw-r--r-- 1 wangjk wangjk 203 Jul  6 18:35 soure_test.sh 
    wangjk@wangjiankun:~/scripts$ source soure_test.sh 
    I will explain the command source

    Define the variable COLOR == black  and NAME == Wangjiankun 
    black 
    Wangjiankun 
    wangjk@wangjiankun:~/scripts$ echo $NAME 
    Wangjiankun 
    wangjk@wangjiankun:~/scripts$ echo $COLOR 
    black 
    wangjk@wangjiankun:~/scripts$

    不知你是否从上面的输出中看出来了蹊跷!要是,恭喜您!

    我们重点看红色部分。上面的输出有两点值得研究:1、没有执行权限的脚本可以被source命令执行;2、被source命令执行的脚本声明的变量在脚本执行完成推出后仍然有效。对比非source命令执行的同一个脚本的输出如下:

    wangjk@wangjiankun:~/scripts$ echo $NAME

    wangjk@wangjiankun:~/scripts$ echo $COLOR

    wangjk@wangjiankun:~/scripts$ ls -l 
    total 4 
    -rw-r--r-- 1 wangjk wangjk 203 Jul  6 18:35 soure_test.sh 
    wangjk@wangjiankun:~/scripts$ ./soure_test.sh 
    -bash: ./soure_test.sh: Permission denied 
    wangjk@wangjiankun:~/scripts$ chmod u+x soure_test.sh                   
    wangjk@wangjiankun:~/scripts$ ./soure_test.sh                          
    I will explain the command source

    Define the variable COLOR == black  and NAME == Wangjiankun 
    black 
    Wangjiankun 
    wangjk@wangjiankun:~/scripts$ echo $NAME                                      

    wangjk@wangjiankun:~/scripts$ echo $COLOR                            

    wangjk@wangjiankun:~/scripts$

    综上所述:source命令可以执行没有执行权限的脚本;source命令执行的脚本的环境可以保存下来。

    究其原因,source命令在执行脚本时,并没有创建新的子进程。原文描述如下:

    If you don’t want to start a new shell but execute the script in the current shell, you source it:

    source script_name.sh

    The script does not need execute permission in this case. Commands are executed in the current shell context, so any changes made to your environment will be visible when the script finishes execution.

  • 相关阅读:
    主机的IOPS需求转换成硬盘实际IOPS负载
    IT安全运维职责
    IT应用运维职责
    存储RAID 选择策略
    交换机接口下错包计数,哪些是属于物理链路(包括本端设备和对端设备硬件问题)引起的
    华为交换机SNMP配置
    c# 位与运算符&简单实现复选框功能【实际应用】
    centos7 安装谷歌浏览器教程
    centos7下 Consul安装
    .netcore3.1 获取请求头header中认证信息并调用其它接口
  • 原文地址:https://www.cnblogs.com/spinsoft/p/2880823.html
Copyright © 2011-2022 走看看