欢迎各位兄弟 发布技术文章
这里的技术是共享的
1 cat a 2 date 3 4 . a 5 Mon Jun 27 09:49:02 CST 2016
linux .(点命令):读取并且在当前的shell中执行文件中的命令
来自 https://www.cnblogs.com/uangyy/p/5619285.html
“.”点命令是shell的一个内部命令,它从指定的shell
从上面可以看出,其实点命令相当于c语言里面的#include。另,点命令还有另一个写法:source。下面我们将举例来说明。
我们先写一个简单的shell脚本文件,暂且命名为file1吧:
#! /bin/bash
a="hi"
echo $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/bash
a="hi"
脚本文件file2(与file1在同一个目录下)
#! /bin/bash
./file1
echo $a
记得改一下file1的权限啊,要不./file1就没法执行了。执行一下看看结果。
什么都没有,是吧。我们再改一下file2,这回用一下咱们的点命令
#! /bin/bash
. ./file1
echo $a
怎么样结果不一样了吧。(原谅我实在太懒了,只能举这么简短的例子了,呵呵)
这个例子应该还是能说明点问题的吧。如果不用点命令的话,会另起shell进程,而启动这个进行的时候,它会建立自己的进程环境(暂且这么叫它吧),然后在这个进行结束的时候,它所建立的环境也随之被销毁。而且点命令就不一样了,它会把点命令所带的shell脚本里的所有内容带到当前的shell进程里,在本程序里,就是变量a了。
废话了这么多,其实好像把点命令想像成C里的#include就OK了,呵呵。不过经过这么折腾,还是学到了一点东西的,至少知道了.不仅有点命令的作用,更有当前目录的意思(冷啊,该补一下linux基础了)。
来自 https://blog.csdn.net/zailushang530839037/article/details/16994951