bash - 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 "$@"
解决方案
git bash 在运行脚本时是否默认创建子shell?
它不是(
)
. shell生成一个单独的进程来执行命令。该进程不继承bash 变量和函数,只继承导出的变量,即它不是子shell。
不使用function name()
,只是name()
。请参阅https://wiki.bash-hackers.org/scripting/obsolete。使用 shellcheck.net 检查脚本。
推荐阅读
- sqlite - Sqlite3:高级 SELECT 查询
- json - 如何在颤动中将对象转换为json?
- amazon-web-services - AWS API Gateway 集成响应 - 当响应包含新行时,Lambda 错误正则表达式匹配失败
- laravel - 创建资源后找不到 Laravel Nova App\Model
- git - 在 gitignore 中添加一个目录,该目录包含在本地和远程的 git 中
- sql - Postgresql 日期的具体时间
- autohotkey - {} 使我的显示设置在 AHK 脚本中弹出
- html - 移动设备上的视图宽度 100% 超过 100% [React]
- ios - 设置首选项“前提条件失败:无效输入索引:2”时 SwiftUI 崩溃
- python-3.x - 发布请求响应在 Python 中返回空字符串