shell脚本的执⾏和source
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
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也是⽆效的。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论