【发布时间】:2021-12-02 04:36:26
【问题描述】:
我正在探索一下 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 "$@"
【问题讨论】:
-
你的脚本没有shebang。你确定可以以
./testScript.sh运行它吗? -
脚本作为子进程运行,但这与子shell不同。
-
另外,“sn-p”按钮仅适用于 HTML + JavaScript。使用
{}按钮格式化其他语言的代码。 -
无论如何——因为你使用的是 bash-only 语法,所以这不是一个正确的 sh 脚本——它特别是一个 bash 脚本;并非所有 sh 副本都会运行它。确实,最好不要在可执行文件名称上使用扩展名——如果您使用 shebang 指定解释器,您可以随意更改该解释器,而无需重命名文件,从而修改调用它的程序。另请参阅Commandname extensions considered harmful。
标签: bash git-bash exit subshell