Bash脚本处理man命令「无对应手册条目」报错的实现方法
解决方案
核心思路是先校验对应命令的man手册是否存在,再执行转换操作;同时增加转换失败后的异常文件清理逻辑,避免生成空白无效PDF。
修改后的完整代码
#!/bin/bash declare -a commands commands=(pwd cd ls mkdir rmdir echo) for i in "${commands[@]}" do # 先校验man手册是否存在,-w参数仅返回手册路径不输出内容 if ! man -w "$i" > /dev/null 2>&1; then echo "警告:未找到命令 $i 的man手册,跳过转换" continue fi # 执行PDF转换 man "$i" | pandoc --pdf-engine=pdfroff -o "$i".pdf # 校验转换结果,失败则清理无效文件 if [ $? -ne 0 ]; then echo "警告:命令 $i 的man手册转换失败,已清理无效文件" [ -f "$i".pdf ] && rm "$i".pdf fi done
关键改动说明
- 新增
man -w校验逻辑:man -w会返回对应命令man手册的存储路径,如果手册不存在,命令退出码为非0,此时直接跳过后续转换步骤,避免无内容输入到pandoc生成空白文件,输出全部重定向到/dev/null不会产生多余日志 - 所有变量调用都增加了双引号包裹,避免命令名包含特殊字符或空格时执行异常
- 新增pandoc转换后的退出码校验:如果转换过程出错(比如pandoc运行异常、依赖缺失),会自动删除生成的不完整PDF文件
- 增加了运行提示,可直接定位哪些命令转换失败
内容的提问来源于stack exchange,提问作者Bishoy Adel
相关产品推荐
相关产品推荐

