首页 > 解决方案 > git bash 在运行脚本文件时是否默认创建子shell?

问题描述

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

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

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

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

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

谢谢!

# 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 "$@"

标签: bashgit-bashexitsubshell

解决方案


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

它不是( ). shell生成一个单独的进程来执行命令。该进程不继承bash 变量和函数,只继承导出的变量,即它不是子shell。

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


推荐阅读