一个零第三方依赖的 Python 小工具:把 commands/ 中的 .txt 命令清单转换为可单独复制、执行和记录日志的 Bash 脚本。
- 递归发现
commands/中的 TXT 文件,并生成同目录结构的.sh文件。 - 使用
config/script_config.csv为每份命令清单设置运行目录。 - 自动为生成脚本记录开始时间、结束时间、退出码、标准输出和错误输出。
- 日志实时显示在终端,同时追加到脚本旁的同名
.log文件。 - 支持 UTF-8、带 BOM 的 UTF-8,以及常见的 GB18030 中文文本。
- 忽略去掉行首空白后以
#开头的整行说明,同时保留命令内部的#。 - Windows、Linux 和 macOS 均可运行生成器;生成结果使用 Bash 执行。
- Python 3.8 或更高版本
- 执行生成脚本的 Linux/macOS 环境需要 Bash 和
tee
生成器只使用 Python 标准库。
克隆仓库:
git clone https://github.com/yztshh/linux-command-script-generator.git
cd linux-command-script-generator把命令写入 commands/ 下的一个或多个 TXT 文件。例如:
# 这一行是说明,不会写入生成脚本
pwd
uname -a
echo "Hello Linux"
Windows 可双击 run_generator.bat,或执行:
python generate_linux_scripts.pyLinux/macOS 可执行:
./run_generator.sh如果入口文件刚从 Windows 复制过来且没有执行权限:
chmod +x run_generator.sh
./run_generator.sh生成结果位于 output/。在 Linux 上可直接交给 Bash:
bash output/example.sh也可以赋予执行权限后运行:
chmod +x output/example.sh
./output/example.shpython generate_linux_scripts.py --all 生成全部脚本
python generate_linux_scripts.py --select 1 生成指定编号
python generate_linux_scripts.py --select 1,3-5 生成多个编号或范围
python generate_linux_scripts.py --list 只查看文件和配置
不带参数运行时,程序会显示命令清单并等待选择。输入 0 代表全部,输入 q 退出。
首次运行后,程序会自动创建 config/script_config.csv:
txt_file,work_dir
example.txt,~
install/app.txt,/opt/my-apptxt_file是文件相对于commands/的路径,不建议手工修改。- 留空或填写
~:从当前 Linux 用户的家目录运行。 ~/project:从家目录下的project运行。/opt/project:从绝对路径运行。project/build:相对于当前 Linux 用户的$HOME解析。
新增 TXT 后再次运行程序,配置文件会自动补充新条目,已有配置保持不变。
假设生成的是 output/example.sh,运行时会创建 output/example.log。日志采用追加模式,不会覆盖之前的记录。脚本所在目录必须可写。
生成脚本不会默认启用 set -e,所以普通命令失败后,后续命令仍会继续。需要遇错停止时,请在命令清单第一条加入:
set -e生成脚本是非交互式 Bash。某些 Linux 发行版的 ~/.bashrc 会在非交互模式下提前返回,因此仅执行 source ~/.bashrc 不一定能加载 NVM 等工具。应直接加载工具的初始化文件,例如:
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"TXT 中的命令会以当前用户权限原样执行。运行前请检查生成脚本,不要运行来源不明的命令;包含 sudo、删除文件、修改服务或重启系统等操作时尤其需要谨慎。
linux-command-script-generator/
├─ commands/ TXT 命令清单
│ └─ example.txt 安全示例
├─ config/ 自动生成的本地配置
├─ output/ 自动生成的 Bash 脚本和日志
├─ tests/ 标准库单元测试
├─ generate_linux_scripts.py 主程序
├─ run_generator.bat Windows 入口
├─ run_generator.sh Linux/macOS 入口
└─ README.md
config/script_config.csv、生成脚本和日志默认被 Git 忽略,避免意外提交本地路径或执行记录。
python -m unittest discover -s tests -v
python generate_linux_scripts.py --all