



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
source命令与“.”点命令source 命令是 bash shell 的内置命令,从 C Shell 而来。source 命令的另一种写法是点符号,用法和 source 相同,从Bourne Shell而来。source 命令可以强行让一个脚本去立即影响当前的环境。source 命令会强制执行脚本中的全部命令,而忽略文件的权限。source 命令通常用于重新执行刚修改的初始化文件,如 .bash_profile 和 .profile 等等。source 命令可以影响执行脚本的父shell的环境,而 export 则只能影响其子shell的环境。使用方法举例:$source /.bashrc或者:$. /.bashrc执行后 /.bashrc 中的内容立即生效。一个典型的用处是,在使用 Android 的 mm 等相关命令时,需要先执行以下命令:$cd $source ./build/envsetup.sh 或者 $. ./build/envsetup.shsource命令(从 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的一个内部命令,它从指定的shell 文件中读入所有命令语句并在当前进程中执行。 因此当多个shell进程(父子进程或无关进程均可)共享一组变量值时,就可以将这些变量赋值语句定义到一个shell文件里,并在需要这些变量值的程序中使用点语句来引用这个shell文件,从而实现变量值共享(对这些变量值的修改仅涉及到这个shell文件)。但要注意的是,这个shell文件不能包括含有位置参数的语句,即不能接受1、2等命令行参数。从上面可以看出,其实点命令相当于c语言里面的#include。点命令还有另一个写法:source。下面我们将举例来说明。我们先写一个简单的shell脚本文件,暂且命名为file1吧:#! /bin/basha=hiecho $a我们先来执行一下这个shell脚本,打开终端,敲入: ./file1结果是什么,你应该也看到了吧:bash: ./file1: Permission denied为什么呢。我们先不管这个吧,先看一下,另一个结果:. ./file1(注意啊,两个点之间有个空格的哦,要不就成了上一级目录了,如果你不嫌麻烦的话,也可以写source ./file1)这个的结果呢,跟前面就不一样了,正如我们所愿的,输出了hi。./file1,直接执行,需要另起shell进程,而你似乎还没有这个权限(这个改一下就OK了,后面再说),而用点命令就不一样了(注意啊,./file这里的点可不是点命令里的点啊,我就被这个问题困扰了很久,汗死,竟然忘了点还有当前目录的意思,大家b4我吧),点命令会在当前的shell下执行。补充说一下怎么改一下file1的权限,让我们可以在按shell脚本来执行:chmod +x file1再执行一下./file1,是不是OK了?再来看另一个例子吧。首先脚本文件file1#! /bin/basha=hi脚本文件file2(与file1在同一个目录下)#! /bin/bash./file1echo $a记得改一下file1的权限啊,要不./file1就没法执行了。执行一下看看结果。什么都没有,是吧。我们再改一下file2,这回用一下咱们的点命令#! /bin/bash. ./file1echo $a怎么样结果不一样了吧。(原谅我实在太懒了,只能举这么简短的例子了,呵呵)。这个例子应该还是能说明点问题的吧。如果不用点命令的话,会另起shell进程,而启动这个进行的时候,它会建立自己的进程环境(暂且这么叫它吧),然后在这个进行结束的时候,它所建立的环境也随之被销毁。而且点命令就不一样了,它会把点命令所带的shell脚本里的所以内容带到当前的shell进程里,在本程序里,就是变量a了。废话了这么多,其实好像把点命令想像成C里的#include就OK了,呵呵。不过经过这么折腾,还是学到了一点东西的,至少知道了.不仅有点命令的作用,更有当前目录的意思(冷啊,该补一下linux基础了)。为什么在shell脚本里面export的环境变量,在set里面竟然看不到。为什么在shell脚本里面用export设置环境变量之后,当shell执行完了,用set命令看不到呢?但是你如果直接在终端里export 环境变量用set是看到的。一个shell脚本test.sh的内容为:#!/bin/bash export AA=123当我们执行test.sh的时候,是当前终端所在的shell fork一个子shell然后执行test.sh的,执行完了再返回终端所在的shell。明白这点,就容易理解了,我们在test.sh设置了AA环境变量,它只在fork出来的这个子shell中生效,子shell只能继承父shell的环境变量,而不能修改父shell的环境变量,所以test.sh结束后,父进程的环境就覆盖回去。所以在test.sh之后完之后,我们用set命令是看不了AA这个环境变量的值的。那有什么办法可以让脚本的环境变量在脚本执行之后仍然对当前终端存在呢?用sorcue 或者.(dot) 。明确告诉shell不要fork执行脚本,而是在当前的shell执行,这样环境变量就可以保存下来了。source命令用法:source Filename (通常用“.”来代替)source test.sh 与 .test.sh是等效的。【补充】source命令与shell scr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中控室值班人员夜间不允许睡觉会议记录
- 技师学院汽车系毕业论文
- 机电系相关毕业论文
- 2024年公务员考试题库附参考答案(培优)
- 2024年社区《网格员》预测题(含答案)
- 2024年公务员考试题库含答案(新)
- 简单数控专业毕业论文
- 毕业论文快速
- 2024年医院医务人员医院感染管理考试试题(含答案)
- 培训课程目标与效果评估方案
- 区域新能源集控中心建设方案
- 电气控制与plc实训教程PPT完整全套教学课件
- 《寻梦环游记(2017)》完整中英文对照剧本
- 2023年医药卫生技能鉴定考试-角膜接触镜验配员考试参考题库(含答案)
- 电子护理文书书写规范
- 肿瘤患者食欲症状问卷
- 高考语文专题复习:小说阅读特殊“异常视角”知识-儿童视角、女性视角、动物视角
- GB/T 20235-2006银氧化锡电触头材料技术条件
- 个人承包车辆运输合同
- 《口腔疾病概要》课件口腔医学技术专业
- 盖板划伤分析8D报告
评论
0/150
提交评论