首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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执行脚本的区别

当shell脚本具有可执行权限时,用sh filename与./filename执行脚本是没有区别得。./filename是因为当前目录没有在PATH中,点表示当前目录。

sh filename 重新建立一个子shell,在子shell中执行脚本里面的语句,该子shell继承父shell的环境变量,但子shell新建的、改变的变量不会被带回父shell。

source filename(. filename):这个命令其实只是简单地读取脚本里面的语句依次在当前shell里面执行,没有建立新的子shell。那么脚本里面所有新建、改变变量的语句都会保存在当前shell里面。

举例

#!/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的状态,因此在实际使用过程中,我们要能够知道他们的相同与不同。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20230222A09BA300?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券