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 检查脚本。
我对 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 检查脚本。