网站地图    收藏   

主页 > 系统 > linux系统 >

Linux Shell脚本中点号和source命令 - Linux操作系统:

来源:自学PHP网    时间:2015-04-14 11:12 作者: 阅读:

[导读] Linux Shell脚本中点号和source命令Linux中一个文件是根据其是否具有执行属性来判断他是否可以直接运行的。就像Windows下的exe一样。如果我们要执行某一个文件,可以先将其权限修改为可执...

Linux Shell脚本中点号和source命令
 
Linux中一个文件是根据其是否具有执行属性来判断他是否可以直接运行的。就像Windows下的exe一样。如果我们要执行某一个文件,可以先将其权限修改为可执行(必须是所有者或者root才能修改)。然后,通过用sh来执行该脚本或者./脚本名。
 
但有时候我们并不想修改文件权限,可能我们也没有那个权限,所以我们可以使用.(点号)+文件名来临时执行一个脚本而无须修改权限。
 
在Linux系统中存在大量的脚本,其中你会看到大量这个用source命令(从 C Shell 而来)执行bash shell的内置命令。点命令,就是个点符号(从Bourne Shell而来)是source的另一名称。同样的,当前脚本中配置的变量也将作为脚本的环境,source(或点)命令通常用于重新执行刚修改的初始化文档,如 .bash_profile 和 .profile 等等。例如,假如在登录后,对.bash_profile中的 EDITER 和 TERM 变量做了修改,则能够用source命令重新执行.bash_profile中的命令而不用注销并重新登录。
 
source命令的作用就是用来执行一个脚本,那么: source a.sh 同直接执行 ./a.sh 有什么不同呢?比如您在一个脚本里export $KKK=111,假如您用./a.sh执行该脚本,执行完毕后,您运行echo $KKK,发现没有值,假如您用source来执行,然后再echo ,就会发现KKK=111。因为调用./a.sh来执行shell是在一个子shell里运行的,所以执行后,结果并没有反应到父shell里,但是source不同他就是在本shell中执行的,所以能够看到结果。
 
经典问题:
 
shell脚本(test.sh)如下:
 
#!/bin/sh
echo "export monitor=1" >> /etc/profile
source /etc/profile
 
调用后(./test.sh),执行echo $monitor,没有输出任何值
 
手动source /etc/profile后,再次执行echo $monitor,输出了预期的值
 
可见脚本中的source /etc/profile没有成功(提法本身就是错误的),请问这个应该怎么解决?
 
A:在执行test.sh的时候,不用./test.sh
 
用source test.sh

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论