bash - 创建一个主 bash 工具箱脚本调用工具作为单独的脚本
问题描述
很难为我的问题找到合适的标题!可能比我想的要简单得多,对此感到抱歉!
目标:
我想构建一个 bash 脚本(工具)集合,所有这些都在一个主 bash 脚本的控制下,该脚本处理一般参数并加载共享函数,然后交给工具代码。
我从我经常使用的 java 应用程序中得到启发,这些应用程序可以被称为
mainApp task param1 param2 ... paramn
其中“mainApp”是主 bash 脚本,“task”是子文件夹 (/tools) 中可能存在的工具之一,“param(1..n)”是传递给任务脚本的参数。
“任务”脚本不仅仅是 bash 函数,它们可能非常大,并且包括它们自己的测试和评估,为了模块化和可读性,我想将它们排除在主脚本之外。我不喜欢 20 页长的 bash 脚本 ;-)
一些任务脚本会调用其他更通用的脚本。
问:
我没有直接看到如何处理 mainApp 中的参数“task”以根据“task”值选择和运行第二个脚本(我应该使用 case 和/或 eval 吗?)
你能帮我很好地构建这个结构,或者给我指出一个入门或适当的措辞来搜索这个主题。
谢谢
解决方案
你可以做这样的事情mainApp
:
#! /bin/bash
T=/path/to/tasks
if [[ $# -lt 1 ]]
then
echo 'usage'
exit 1
fi
task="$1"
shift
if [[ -x "$T/$task" ]]
then
exec "$T/$task" "$@"
else
echo "no such task $task"
fi
因此,如果您添加任务或更改参数,则不必更改mainApp
脚本。
您的任务应该都在tasks
目录中,并且必须具有可执行权限。
推荐阅读
- java - 修改模块名称后 Eclipse IDE 不运行 Java 应用程序
- python - Django:访问模型实例
- python - 有没有办法使用 API 来安排直播并将其添加到现有播放列表并指定流密钥?
- c++ - 如何获取数组第一个元素的镜像?
- stormcrawler - Stormcrawler:在 Elasticsearch 中存储抓取页面的外链
- sql - 如何根据值选择具有偏好的不同记录
- openedge - 我可以使用 Progress Developer Studio for OpenEdge 的哪个工具来测试 ABL 查询?
- kubernetes - 为什么运行的 pod json 中没有出现“版本”标签?
- powershell - 提取存档到传统文件夹结构
- glsl - 帮助理解简短的水彩着色器代码?