git bash 是否在 运行 脚本文件时默认创建子 shell?

Does git bash create a subshell by default when running a script file?

我对 shell 脚本进行了一些探索并编写了这个脚本。当构建命令失败时,它必须提供错误消息并退出。

我知道出口 1 会关闭当前 shell 其 运行 宁。 exit 语句在大括号内(意味着它在同一个 shell 上执行)。但是当这个脚本是 运行 作为 ./testScript.sh 它停止执行 test(),testTwo() 不会被调用,并且终端保持打开状态。

虽然这正是我正在寻找的功能,但我的问题是为什么它不会因为出口 1 而关闭终端;命令? git bash 会在 运行 脚本时默认创建子 shell 吗?

我知道这不是因为它是在函数中调用的。我确实尝试 运行 在没有函数的情况下在脚本中使用 exit 语句,但它仍然没有关闭终端。

任何关于 git bash 和退出命令实际工作的见解都将非常有用。

谢谢!

# testScript.sh

function test() {
    dotnet build -c Debug sample.csproj || { echo -e "${RED}=== Build Failed";  exit 1; }
}

function testTwo() {
    echo "== executing test two function."
}

function all()
{
    pushd .
  test
  testTwo
    popd
}

all "$@"

Does git bash creates a subshell by default when running a script?

它不是 ( ) 中的“subshell”。 shell spawns 一个单独的 process 执行命令。进程不继承bash个变量和函数,只继承exported个变量,即不是subshell.

不要使用 function name(),只使用 name()。参见 https://wiki.bash-hackers.org/scripting/obsolete 。使用 shellcheck.net 检查脚本。