特性 | source test.sh | bash test.sh | ./test.sh |
---|---|---|---|
执行环境 | 当前 Shell | 子 Shell | 子 Shell |
环境变量影响 | 会影响当前 Shell | 不影响当前 Shell | 不影响当前 Shell |
脚本权限 | 不需要执行权限 | 不需要执行权限 | 需要执行权限 |
执行速度 | 较快(无子 Shell 开销) | 较慢(有子 Shell 开销) | 较慢(有子 Shell 开销) |
使用场景 | 改变当前 Shell 环境 | 独立执行脚本 | 独立执行脚本 |
source test.sh
描述:在当前 Shell 会话中执行 test.sh
脚本。
执行环境:脚本中的所有命令在当前 Shell 中执行,任何环境变量的更改或定义都会影响当前 Shell。
适用场景:需要脚本更改当前 Shell 的环境,例如定义或修改变量、改变目录等。
bashsource test.sh
# 或者
. test.sh
bash test.sh
描述:启动一个新的 Bash Shell 会话来执行 test.sh
脚本。
执行环境:脚本在一个新的子 Shell 中运行,脚本中的环境变量和目录改变不会影响当前 Shell。
适用场景:不需要脚本改变当前 Shell 的环境,脚本可以独立执行。
bashbash test.sh
./test.sh
描述:在当前 Shell 中启动一个新的子进程来执行 test.sh
脚本。脚本必须具有执行权限。
执行环境:脚本在一个新的子 Shell 中运行,类似于 bash test.sh
,环境变量和目录改变不会影响当前 Shell。
适用场景:与 bash test.sh
类似,需要脚本具有执行权限。
bashchmod +x test.sh
./test.sh
假设 test.sh
脚本内容如下:
bash#!/bin/bash
echo "Current directory is: $(pwd)"
MYVAR="Hello"
echo "MYVAR is: $MYVAR"
source
:bashsource test.sh
echo "After sourcing, MYVAR is: $MYVAR"
输出:
bashCurrent directory is: /path/to/dir MYVAR is: Hello After sourcing, MYVAR is: Hello
MYVAR
的值在当前 Shell 中被保留。
bash
或 ./
:bashbash test.sh
echo "After running bash, MYVAR is: $MYVAR"
或
bash./test.sh
echo "After running ./, MYVAR is: $MYVAR"
输出:
bashCurrent directory is: /path/to/dir MYVAR is: Hello After running bash, MYVAR is:
MYVAR
的值在当前 Shell 中未被保留。
本文作者:GYC
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!