Linux source命令与sh shell scripts、./执行脚本的区别

Linux source命令与sh shell scripts、./执行脚本的区别

参考链接:https://www.cnblogs.com/lh03061238/p/9952759.html

问题:

运行如下命令./set_env.sh设置相关环境变量时发现:当此命令运行结束后,脚本中所设置的环境变量仍为空,感觉此脚本没有执行;运行. set_env.sh脚本执行成功。通过上网查询,发现是由于source命令与shell scripts的作用范围不同而导致的。
 

1、source 以及 . 直接在当前的进程中读取脚本的配置,不会开一个新的进程!
source会将脚本的内容直接影响到父进程的(因为它不开辟新线程,可以说是直接在当前进程中加入脚本的执行内容)。所以你source之后,里面配置的变量都会加入到当前环境中,你可以在该shell中调用脚本中的变量!

2、而./xx.sh 以及 sh xx.sh
是在当前进程下新开一个子shell进程运行这个脚本,当脚本运行完毕了,sh中设置的变量和子进程一起被销毁了!(该子shell继承了父进程的shell的环境变量,子shell结束了变量将被销毁,如果使用了export可以将子shell的变量反馈到父级别的shell中)
例如:

vi ./test.sh

   #!/bin/bash 
  export test=/path/to/sdk
  echo $test   需要实时执行才能生效

参考链接:https://www.cnblogs.com/chengyeliang/p/4137011.html

source FileName
  作用:在当前bash环境下读取并执行FileName中的命令。
  注:该命令通常用命令“.”来替代。
  如:source .bash_rc 与 . .bash_rc 是等效的。
注意:source命令与shell scripts的区别是:
  source在当前bash环境下执行命令,而scripts是启动一个子shell来执行命令。
  这样如果把设置环境变量(或alias等等)的命令写进scripts中,
  就只会影响子shell,无法改变当前的BASH,
  所以通过文件(命令列)设置环境变量时,要用source 命令。

shell的嵌入命令:

: 空,永远返回为true
.   从当前shell中执行操作
break 退出for、while、until或case语句
cd 改变到当前目录
continue 执行循环的下一步
echo 反馈信息到标准输出
eval 读取参数,执行结果命令
exec 执行命令,但不在当前shell
exit 退出当前shell
export 导出变量,使当前shell可利用它
pwd 显示当前目录
read 从标准输入读取一行文本
readonly 使变量只读
return 退出函数并带有返回值
set 控制各种参数到标准输出的显示
shift 命令行参数向左偏移一个
test 评估条件表达式
times 显示shell运行过程的用户和系统时间
trap 当捕获信号时运行指定命令
ulimit 显示或设置shell资源
umask 显示或设置缺省文件创建模式
unset 从shell内存中删除变量或函数
wait 等待直到子进程运行完毕

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

a746742897

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值