shell脚本的执行和source

来源:互联网 发布:2017大数据概念股龙头 编辑:程序博客网 时间:2024/05/21 07:50

 shell命令可以事先写入一个文件中,使用时shell读取文件中的命令逐条解释执行,这种文件,被称为脚本。

 执行脚本的方法与执行其他程序一样,如:

  ./setenv.sh  #setenv.sh是当前目录下的一个脚本

 以这种方法执行脚本时,其中的命令是在一个子shell中执行的。子shell继承了父shell的环境变量,但无法修改他们,或者说所做的修改仅对子shell有效。

 如果要使用脚本来修改环境变量,则必须让脚本在当前shell中执行,这一点可以用以下命令实现:

 source setenv.sh #读入setenv.sh文件中的命令,在当前shell中执行。

  source 是内置命令,用途是读取文件中的内容,并在当前shell中逐条执行。这种方式执行的脚本无须执行权限。source命令可以缩写为一个小数点,如

  source setenv.sh 等价于 . setenv.sh



以下是一个例子:


在shell中设置TARGET变量

TARGET=arm-linux


然后新建了一个脚本文件test.sh,里面echo ${TARGET}


1.  执行 ./test.sh #无任何输出,因为test.sh在子shell中执行,如果不加export,就不会在子shell中看到这个变量,因为它还不是一个系统环境变量

2. 执行source test.sh #输出arm-linux,因为test.sh在当前shell中执行

3. export TARGET

    ./test.sh #输出arm-linux,因为export了TARGET的值






所以得出的结论是:1、执行脚本时是在一个子shell环境运行的,脚本执行完后该子shell自动退出;2、一个shell中的系统环境变量才会被复制到子shell中(用export定义的变量);3、一个shell中的系统环境变量只对该shell或者它的子shell有效,该shell结束时变量消失(并不能返回到父shell中)。3、不用export定义的变量只对该shell有效,对子shell也是无效的。


0 0