原标题:Linux下source命令、点命令和./执行命令的不同
对于经常使用linux系统的同学而言,source filename与./filename应该是大家日常非常高频使用的命令了,其实除了这两个外,还有一个叫做点命令的东西,那么这几者之间有什么区别和联系呢?日常工作学习中,我们又什么时候会用到这些命令符号呢?
什么是点命令?
首先,不要将点命令与点文件或相对路径表示法混淆。例如 .profile 表示该文件(夹)是一个隐藏文件(夹),您需要使用 ls -a 看到该文件(夹)。另外点还可以表示相对路径,比如,当前文件夹中有一介名为“my-script.sh”的脚本,./my-script.sh 表示当前目录下的my-script.sh脚本。../my-script.sh 表示上一层目录的my-script.sh脚本。
点命令,一种在当前shell下读入路径为filename的文件并依次执行文件中的所有语句的命令,即不会启动一个新的子进程,所有在脚本中设置的变量将成为当前Shell的一部分。比如:当我们修改了/etc/profile文件,并想让它立刻生效,而不用重新登录,就可以使用点命令,如“. /etc/profile”,这么一看是不是觉得有点眼熟,这不就是source命令吗?
source命令,从C Shell而来,是bash shell的内置命令。点命令,从Bourne Shell而来,是source的另一名称。在bash环境下,两者在使用上是等价的。
source filename(. filename) 与sh filename 及 ./filename执行脚本的区别
举例
#!/usr/bin/env bash
export A="hello world"
echo $A
在当前目录下,我们有一个脚本my-script.sh脚本,内容如上。这时候,我们去执行./my-script.sh或 sh my-script.sh,会得到下面的结果。
$ ./test.sh
hello world
$ echo $A
也就是说,脚本执行了,但是脚本里的环境变量并没有影响当前shell。但是当我们执行. my-script.sh(注意中间有一个空格),或source my-script.sh。
$ . test.sh
hello world
$ echo $A
hello world
可以看到,A这个变量直接在当前shell下生效了,改变了当前环境的变量。
小结
上面几种命令都可以用来自动执行Shell脚本,从而实现自动化管理。它们可以用来启动某些服务,安装某些软件,改变某些操作系统参数或完成其他操作,也可以用来检查脚本的正确性,例如检查脚本的语法和变量定义等。使用这些命令可以节省时间和节约资源,提高脚本的工作效率。
但是source命令和点命令会改变当前shell的状态,因此在实际使用过程中,我们要能够知道他们的相同与不同。返回搜狐,查看更多
责任编辑:
0 留言