Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1928949
  • 博文数量: 389
  • 博客积分: 7877
  • 博客等级: 少将
  • 技术积分: 4521
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-10 14:02
文章分类

全部博文(389)

文章存档

2024年(1)

2022年(1)

2021年(1)

2020年(1)

2019年(1)

2018年(3)

2017年(6)

2016年(4)

2015年(8)

2014年(15)

2013年(31)

2012年(19)

2011年(47)

2010年(33)

2009年(105)

2008年(109)

2007年(4)

分类: LINUX

2009-10-21 15:58:00

这里记录的是在一个shell脚本里面使用
. ./file.sh 和
./file.sh 的区别,本文参考了 (这个蓝森林的东西应该是来源于chinaunix)


来个小实验
场景一:
vi file1.sh
./file2.sh
echo $NIVEK

vi file2.sh
NIVEK=goupi
export NIVEK

chmod 755 file1.sh file2.sh

$./file1.sh
                  //没有任何输出
$

场景二:
vi 1file.sh
. ./2file.sh
echo $NIVEK

vi 2file.sh
NIVEK=goupi
export NIVEK

chmod 755 1file.sh 2file.sh

$./1file.sh
goupi              //在2file.sh里面export 的变量NIVEK的值
$

由此可以看到它们的区别,即
./file.sh  将重启一个新的子shell来执行它,所以如果在file.sh中定义的一些变量(export)只在子shell有作用,返回后将失去作用.

. ./file.sh 不启动新的shell,在当前shell中执行,所以在file.sh中定义的变量返回后依然有作用.


再看一下这个简单的例子:
cat 1.sh
#!/bin/bash
sleep 1
exit 1

cat test1.sh
#!/bin/bash
./1.sh
echo "can you see me"

cat test2.sh
#!/bin/bash
. ./1.sh
echo "can you see me"

分别执行test1.sh, test2.sh从它们的区别里面可以看到一些不同

阅读(3750) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~