.和source与bash或sh执行脚本时的区别

目录

1. source命令

2. sh/bash命令

3. ./方式


1. source命令

source .bash_profile

. .bash_profile两者等效。

source(或点) 命令通常用于重新执行刚修改的初始化文档。

使用source或 . 命令时,你可以在当前Shell中直接运行一个Shell脚本,而不需要给脚本添加执行权限。这就像是把脚本内容直接放到当前Shell中执行一样。

source script_a.sh

或者

. script_a.sh

注意,在 . 命令和脚本文件之间有一个空格。

2. sh/bash命令

通过sh或bash命令执行脚本时,会在一个新的子Shell中运行脚本,而且脚本不需要有执行权限。子Shell是一个独立的执行环境,脚本中设置的变量不会影响到父Shell。

sh script_a.sh

或者

bash script_a.sh

3. ./方式

使用./方式执行脚本时,会在一个新的子Shell中运行脚本,但是此时脚本需要有执行权限。可以使用chmod +x添加执行权限。

chmod +x script_a.sh
./script_a.sh

另外,使用./方式执行的文件如果包含alias语句,Shell不会将alias别名扩展成对应的命令。解决这个问题可以使用shopt命令开启alias扩展选项:

shopt -s expand_aliases

shell 脚本各种执行方式(source ./*.sh, . ./*.sh, ./*.sh)的区别

结论一: ./*.sh的执行方式等价于sh ./*.sh或者bash ./*.sh,此三种执行脚本的方式都是重新启动一个子shell,在子shell中执行此脚本,脚本中设置的变量在脚本执行完毕后不会保存。但是若 script.sh 脚本不是以 #!/bin/bash 开头,那么也不会在子进程中执行。

结论二: source ./*.sh和 . ./*.sh的执行方式是等价的,即两种执行方式都是在当前shell进程中执行此脚本,而不是重新启动一个shell 在子shell进程中执行此脚本,并且脚本中设置的变量在脚本执行完毕后会保存下来。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值