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。
Linux Shell脚本中点号和source命令的更多相关文章
- Linux Shell脚本入门--cut命令
Linux Shell脚本入门--cut命令 cut cut 命令可以从一个文本文件或者文本流中提取文本列. cut语法 [root@www ~]# cut -d'分隔字符' -f fields &l ...
- Linux Shell脚本入门--wget 命令用法详解
Linux Shell脚本入门--wget 命令用法详解 wget是在Linux下开发的开放源代码的软件,作者是Hrvoje Niksic,后来被移植到包括Windows在内的各个平台上.它有以下功能 ...
- linux shell 脚本攻略学习20--awk命令入门详解
awk生于1977年,创始人有三个,分别为 Alfred Aho,Peter Weinberger, 和 Brian Kernighan,名称源于三个创始人的姓的首字母. 作用:处理文本文件. awk ...
- Shell脚本中点号+文件名的作用
熟悉linux是程序员必须具备的技能,水滴石穿,一点点学习吧. linux中一个文件是根据其是否具有执行属性来判断他是否可以直接运行的.就像windows下的exe一样. 如果我们要执行某一个文件,可 ...
- Linux Shell脚本编程--curl命令详解
用途说明 curl命令是一个功能强大的网络工具,它能够通过http.ftp等方式下载文件,也能够上传文件.其实curl远不止前面所说的那些功能,大家可以通过man curl阅读手册页获取更多的信息.类 ...
- Linux Shell脚本入门--grep命令详解
grep简介<摘自鸟哥,并加以整理.> grep (global search regular expression(RE) and print out the line,全面搜索正则表达 ...
- Linux Shell脚本入门--awk命令详解
简单使用: awk :对于文件中一行行的独处来执行操作 . awk -F :'{print $1,$4}' :使用‘:’来分割这一行,把这一行的第一第四个域打印出来 . 详细介绍: AWK命令介绍 ...
- linux shell 脚本攻略学习19--sed命令详解
sed(意为流编辑器,英语“stream editor”的缩写)是Unix/linux常见的命令行程序.sed用来把文档或字符串里面的文字经过一系列编辑命令转换为另一种格式输出,即文本替换.sed通常 ...
- Linux Shell脚本编程--nc命令使用详解
linux nc命令使用详解 功能说明:功能强大的网络工具 语 法:nc [-hlnruz][-g<网关...>][-G<指向器数目>][-i<延迟秒数>] ...
随机推荐
- javascript在html中使用 第10节
javascript在html中使用 index.html: <html> <head> <title>javascript</title> <s ...
- js和css分别实现透明度的动画实现
js实现 两个函数 即setInterval和setTimeout setTimeout((function(){})(1/10),1*100) 该函数有两个参数,第一个为执行的函数,第二个为事件参数 ...
- Headfirst设计模式的C++实现——工厂方法(Factory Method)
引用原书的一句话:所有的工厂模式都用来封装对象的创建,工厂方法模式通过让子类决定该创建的对象是什么来达到封装的目的. Pizza类及其派生类与上一例相同 PizzaStore.h #ifndef _P ...
- hibernate符合主键
当有符合主键时,一方与多方的复合主键顺序必须一致: <set> <key> <column name="A" /> <column nam ...
- fork();
僵死进程: 父进程没有等待子进程,wait() 子进程会变成僵死进程. int main(int arg, char *args[]){ pid_t pid = fork();//调用fork产生一个 ...
- JSON知多少-JSON数据结构
最近在开发微信平台,要使用JSON进行数据交换,之前用过JSON,但仅限于…… 在开发微信平台中,要使用JSON形式如下:代码片断1: { "button":[ { "t ...
- linux 中 ‘|’的作用
利用Linux所提供的管道符“|”将两个命令隔开,管道符左边命令的输出就会作为管道符右边命令的输入.连续使用管道意味着第一个命令的输出会作为 第二个命令的输入,第二个命令的输出又会作为第三个命令的输入 ...
- lucene 实现word,pdf全文检索源码
创建索引: import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import jav ...
- Linux使用问答
1.ubuntu 查看安装的软件包? 在终端输入 sudo dpkg -l http://vardesa.blog.hexun.com/58593247_d.html 其他:http://qiuye. ...
- [转]EJS入门
今天学习了EJS,转个再点个赞,动态创网页的好方法! 主页:http://www.embeddedjs.com/ 转自:http://www.csser.com/board/4fddc4f0b28ed ...