执行shell脚本是当前session有效还是全局有效呢

执行 Shell 脚本时,其作用范围(即变量、环境设置等)取决于你如何执行该脚本。具体来说,Shell 脚本的作用范围可以是当前会话有效全局有效,取决于脚本的执行方式。

1. 当前 Session 有效(默认)

如果你在一个普通的 Shell 中执行脚本(例如,./script.shbash script.sh),脚本中的变量和环境更改只会影响当前 Shell 会话(即当前终端窗口或进程)。这些修改不会传播到父 Shell 或其他会话中。

例如:

# 在 script.sh 中
#!/bin/bash
export MY_VAR="Hello World"
echo "MY_VAR inside script: $MY_VAR"
  • 执行方法:bash script.sh
  • 结果:MY_VAR 只在 script.sh 内部有效,执行完脚本后,MY_VAR 不会影响当前 Shell 会话。

2. 全局有效(当前会话和父 Shell)

如果你希望脚本中的变量或环境设置能够影响父 Shell 或者整个当前会话,需要使用 source 命令或 .(点命令)来执行脚本。

使用 source. 执行脚本
  • source script.sh. script.sh

这两种方式会在当前 Shell 环境中执行脚本,而不是启动一个新的子进程。这意味着脚本中的变量、函数、环境设置等都会影响当前的 Shell 会话。

例如:

# 在 script.sh 中
#!/bin/bash
export MY_VAR="Hello World"
echo "MY_VAR inside script: $MY_VAR"
  • 执行方法:source script.sh. script.sh
  • 结果:MY_VAR 变量会在脚本执行后继续保留,并且可以在当前 Shell 会话中访问。

3. 区别总结

执行方式是否影响当前 Shell 会话是否影响父 Shell 会话
./script.sh否(会在新进程中执行)
bash script.sh否(会在新进程中执行)
source script.sh是(在当前进程中执行)
. script.sh是(在当前进程中执行)

4. 实际应用场景

  • 如果你只需要执行一些计算、打印信息或者临时修改变量,并且不需要这些更改影响到当前会话,使用 ./script.shbash script.sh 就可以了。

  • 如果你需要通过脚本设置环境变量、定义函数或者修改当前会话中的配置,使用 source. 来执行脚本。

5. 注意:

  • 环境变量的作用范围:通过 source 执行脚本时,脚本修改的环境变量会保留在当前 Shell 会话中,直到你关闭终端或手动修改它们。
  • 退出子 Shell:如果脚本使用 bash script.sh 执行,它会在一个新的子 Shell 中运行,执行完毕后这个子 Shell 会退出,因此对环境变量的更改不会对父 Shell 产生影响。

希望这个解释能够清楚地帮助你理解两种执行方式的差异!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

蘋天纬地

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

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

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

打赏作者

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

抵扣说明:

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

余额充值