[svc]彻底明白centos set&env bash&source&exec执行程序本质区别

来源:互联网 发布:迅雷网络 股票代码 编辑:程序博客网 时间:2024/06/05 05:37

从这个图看下env和set的本质区别

  • env是用户变量,可被子bash(fork的进程)继承
  • set是bash本地变量,无法被子bash继承
  • 本地变量包含了所有的环境env变量
  • 本bash export name=”maotai”,则在子bash里也会env|grep name,存在, set|grep name也存在

  • sh 1.sh,开子bash执行完毕脚本

name="maotai"$ cat 1.sh#!/bin/bashecho $name# 未输出任何
  • source 1.sh,不开启子bash: source不会开子bash
name="maotai"$ cat 1.shecho $name# 输出maotai
  • exec,不会开子bash,会把进程生命赋给要执行的命令
    exec命令在执行时会把当前的shell process关闭,然后换到后面的命令继续执行

  • bash shell的命令分为两类:外部命令和内部命令
    参考(很经典):http://www.cnblogs.com/zhaoyl/archive/2012/07/07/2580749.html
    http://blog.csdn.net/clozxy/article/details/5818465

下面剖析下细节