Skip to content

BITchCreateShitWare/how-to-dispatch-c-lib-with-shell

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 

Repository files navigation

NOTICE

  1. ai generated code

脚本完整解析

这是一个自包含式 Shell 打包/提取工具脚本/bin/sh 兼容),核心作用是把项目的 include/lib/ 目录打包嵌入到脚本自身中,让脚本变成「单文件可分发」的工具;同时支持从脚本中提取目录、清理还原脚本,实现脚本+资源一体化

一、核心目的

  1. 打包:将当前项目的 include/(头文件)、lib/(库文件)目录压缩后,直接追加到本脚本文件末尾,让脚本自带资源文件。
  2. 提取:把嵌入在脚本里的 include/lib/ 解压到指定目录,还原原始文件结构。
  3. 清理:删除脚本中嵌入的所有资源数据,还原成干净的原始脚本。
  4. 应用场景:需要分发「脚本+配套库/头文件」的场景,无需单独打包资源,直接分发一个脚本文件即可。

二、关键固定配置

MARKER="# __GEN_SIMPLE_PROJECT_BUNDLE__"  # 数据分隔标记(脚本和二进制数据的分界线)
SOURCE_DIRS="include/ lib/"               # 固定要打包/提取的目录
  • MARKER:脚本的分界线,标记行以上是脚本代码,以下是打包的二进制数据。
  • SOURCE_DIRS:写死了只处理 includelib 两个目录,不可动态修改。

三、核心函数详解

1. show_usage

打印帮助信息,告诉用户脚本的用法、必选参数、可选参数,是标准的 Shell 脚本帮助函数。

2. check_bundle_source

打包前的校验函数:检查当前目录下是否存在 include/lib/,缺少任意一个就直接报错退出,保证打包合法性。

3. bundle_files(核心:打包逻辑)

把目录压缩后嵌入脚本自身,步骤:

  1. 复制脚本到临时文件,删除旧的打包数据(避免重复打包);
  2. 保留脚本原始代码,追加分隔标记 MARKER
  3. tar 压缩 include/lib/给每一行数据加 # 前缀(防止被 Shell 执行,保护二进制数据);
  4. 把加密后的压缩数据追加到脚本末尾;
  5. 清理临时文件,完成打包。

关键技巧:二进制数据加 # 前缀,Shell 会把它当成注释,不会执行,完美兼容脚本格式。

4. extract_files(核心:提取逻辑)

从脚本中还原目录,步骤:

  1. 检查目标目录是否存在,确认覆盖;
  2. 找到脚本中的分隔标记行,从标记行下一行开始读取数据
  3. 去掉每一行的 # 前缀,还原原始 tar 压缩包;
  4. 解压到指定目录,还原 include/lib/

5. clean_script(核心:清理逻辑)

还原脚本为原始状态:

  1. 找到分隔标记行;
  2. 只保留标记行及以上的脚本代码,删除后面所有打包数据;
  3. 覆盖原脚本,得到干净的工具脚本。

6. main

脚本主入口:

  1. 解析命令行参数(--bundle/-o/--clean 等);
  2. 校验参数合法性(必须三选一);
  3. 开启调试模式(set -x);
  4. 根据参数调用对应核心函数(打包/提取/清理)。

四、完整用法示例

1. 打包目录到脚本

# 当前目录有 include/ 和 lib/,执行打包
./脚本名.sh --bundle

执行后,脚本文件体积变大,include/+lib/ 已嵌入脚本末尾。

2. 从脚本提取目录

# 提取到 ./my_project 目录
./脚本名.sh -o ./my_project

会在 my_project/ 下生成 include/lib/

3. 清理脚本,还原原始状态

./脚本名.sh --clean

删除脚本中所有打包数据,变回小巧的工具脚本。

4. 查看帮助

./脚本名.sh -h

五、核心技术亮点

  1. 自包含设计:脚本自身既是工具,又是资源包,无需额外文件;
  2. 数据安全:二进制数据加 # 前缀,不会被 Shell 误执行;
  3. 安全操作:打包/清理都用临时文件备份,防止脚本损坏;
  4. 跨平台兼容:标准 /bin/sh 语法,Linux/macOS 通用。

六、总结

  1. 本质:一个自带资源打包/提取功能的 Shell 工具,实现「脚本+项目文件」一体化;
  2. 核心功能:打包(嵌入目录)、提取(还原目录)、清理(还原脚本);
  3. 适用人群:需要分发带 include/lib 资源的脚本工具的开发者;
  4. 核心原理:用标记行分隔脚本代码和二进制数据,通过 tar 压缩+# 前缀保护数据。

ref links

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages