Bashblog – 一个用于创建博客的单一 bash 脚本
摘要
Bashblog 是一个单一的 bash 脚本,让你从命令行创建静态博客,零依赖,支持 Markdown、RSS、标签和评论。
查看缓存全文
缓存时间: 2026/06/28 07:54
cfenollosa/bashblog
来源:https://github.com/cfenollosa/bashblog
bashblog
一个用于创建博客的单一Bash脚本。
我创建它的原因是,我想要一种非常简单的方式来发布博客文章,只需使用服务器上的一个公共文件夹,无需任何特殊要求和依赖。适用于GNU/Linux、OSX和BSD。
有多简单?只需输入 ./bb.sh post 即可开始撰写博客文章。
asciinema (https://asciinema.org/a/4nr44km9ipow4s7u2w2eabeik)
你可以在这里看到一个示例:阅读最初的博客文章 (https://web.archive.org/web/20130520204024/http://mmb.pcb.ub.es/~carlesfe/blog/creating-a-simple-blog-system-with-a-500-line-bash-script.html)。该页面100%使用bashblog生成,未做额外调整。
demo (https://raw.githubusercontent.com/cfenollosa/bashblog/gh-pages/images/demo.png)
查看其他bashblog用户 (https://www.google.com/search?q=%22Generated+with+bashblog,+a+single+bash+script+to+easily+create+blogs+like+this+one%22)
使用方法
下载代码并将bb.sh复制到一个公共文件夹中(例如 $HOME/public_html/blog),然后运行 ./bb.sh
这将显示可用命令。如果文件不可执行,请键入 chmod +x bb.sh 并重试。
在创建第一篇博客文章之前,你可能需要配置博客设置(标题、作者等)。阅读下文“配置”部分以获取更多信息
要创建你的第一篇博客文章,只需运行:
./bb.sh post
如果安装了Markdown,它将尝试使用Markdown。要强制使用HTML:
./bb.sh post -html
脚本将处理其余部分。完成后,访问该文件夹的公共URL(例如 http://server.com/~username/blog),你应该能看到索引文件和一篇新文章页面!
如何…
请阅读wiki (https://github.com/cfenollosa/bashblog/wiki) 了解如何使用Bashblog的高级功能,例如页眉和页脚、静态页面等。
功能特点
- 超简单使用:只需用你喜欢的编辑器输入文章,脚本处理其余部分。无需模板。
- 无需安装。下载
bb.sh开始写博客。 - 零依赖。仅基于基础工具运行(
date、basename、grep、sed、head等) - 开箱即用,兼容GNU/Linux、BSD和OSX,Mac上不需要GNU
coreutils。它会自动检测系统所需的命令开关。 - 所有内容均为静态。你只需要一个带有公共web文件夹的机器shell访问权限。提示:高级用户可以通过
ftpfs挂载远程公共文件夹,并在本地运行此脚本 - 支持草稿,包含简单但干净的样式表,自动生成RSS文件。
- 支持标签/分类
- 支持Markdown、Disqus评论、Twitter、Feedburner、Google Analytics。
- 该项目截至2016年仍在维护。错误会修复,也会考虑新功能(参见“贡献”部分)
- 所有内容存储在一个约1000行的bash脚本中,这有多酷?!;)
配置
配置对于测试运行不是必需的,但如果你打算用bashblog运营博客,你会希望将默认标题、作者名等更改为你自己的。
有两种配置博客字符串的方法:
- 编辑
bb.sh并修改global_variables()函数中的变量 - 创建一个包含配置值的
.config文件——如果你不想修改脚本,并且希望可以通过git定期更新,这很有用
软件会先加载脚本中的值,然后用 .config 文件中的值覆盖。这意味着你不需要在配置文件中定义所有变量,只需定义那些需要覆盖默认值的变量。
.config 文件的格式是每行一个 variablename="value",就像 global_variables() 函数中那样。
请记住: 值要用引号括起来,不要用美元符号声明变量,等号两边不要有空格。
bashblog 使用 $EDITOR 环境值来打开文本编辑器。
详细功能
- 一个简单但美观且可读的设计,只包含博客文章
- 2.0 新增 通过第三方库支持Markdown。最简单的方法是下载 Gruber 的 Markdown.pl (http://daringfireball.net/projects/markdown/)
- 文章预览
- 将文章保存为草稿,稍后恢复编辑
- 每篇文章都生成一个HTML页面,使用文章标题作为URL
- 可配置首页显示的文章数量
- 自动生成RSS文件,支持Feedburner
- 额外的页面包含所有文章的索引
- 自动为每个标签生成页面
- 重建所有文件同时保留原始数据
- 评论委托给Twitter,额外支持Disqus
- 无cookie的Twitter分享选项,以符合欧盟Cookie法律 (https://github.com/cfenollosa/eu-cookie-law)
- 支持Google Analytics代码
- 包含自己的CSS,因此默认情况下所有样式合理
- 页眉、页脚,以及所有格式良好的HTML文件所需的内容
- 支持在每个页面顶部添加额外内容(例如横幅、图片等)
- W3C验证:xhtml验证、CSS验证、RSS验证
- 每次发布文章时自动备份网站(存储为
.backup.tar.gz)
阅读“更新日志”部分了解更多更新,或查看我的博客 (http://cfenollosa.com/blog/tag_bashblog.html)
贡献
Bashblog 开始时约为500行,现在已超过1000行。如果我们希望保持代码简洁且易于理解,我们需要努力克制自己,不要添加太多功能。
欢迎所有错误修复,但全新功能需要充分论证才能纳入主分支。每个新的请求都会在评论中诚实且文明地讨论。
作为指导原则,拉取请求应该:
- 解决某些人的用例(例如国际化)
- 添加一个合理常见的用例(例如集成Disqus评论)
- 尽量小(几行代码)
- 不需要对代码进行重大重写(不要破坏
create_html_file()或write_entry()等) - 必须在Linux、BSD和Mac上工作。注意不要使用带有非POSIX标志的GNU coreutils(例如
date或grep) - 遵循UNIX哲学:做一件事并做好,依靠第三方软件实现外部功能等
- 始终在使用默认配置时保持向后兼容
更新日志
- 2.10 添加了
global_twitter_card_image - 2.9 添加了
body_begin_file_index - 2.8 错误修复,斯拉夫语言支持(感谢 Tomasz Jadowski),移除了现已失效的Twitter JSON API分享计数,支持不由bashblog管理的静态HTML文件
- 2.7 将文章日期存储为HTML文件中的注释 (#96)。重建时,文章日期将在注释日期和文件日期之间同步,注释日期优先。
- 2.6 支持多作者,为每个作者使用不同的
.config - 2.5 Martijn Dekker 进行了大量代码清理,‘tags’ 命令,标签列表(网站和命令)中的 ‘posts’ 词现在有单数形式,查看
template_tags_posts_singular - 2.4 为文章添加了Twitter摘要元数据 (#36)
- 2.3.3 移除了大注释头。添加了在索引页面上显示截断文章标签的选项 (#61),清理了“所有文章”页面 (#57)
- 2.3.2 添加了使用topsy替代twitter获取引用的选项
- 2.3.1 无cookie Twitter选项
- 2.3 智能标签重建,Markdown作为默认格式
- 2.2 灵活的文章标题到文件名的转换
- 2.1 支持标签/分类,‘delete’ 命令
- 2.0.3 通过外部文件支持其他分析代码
- 2.0.2 修复了当
$body_begin_file为空时的错误。在页脚添加了指向github项目的额外链接 - 2.0.1 允许自定义页眉/页脚文件
- 2.0 添加了Markdown支持。完全支持BSD的date
- 1.6.4 修复了本地化日期中的错误
- 1.6.3 现在支持BSD的date
- 1.6.2 简化了一些函数和变量以避免重复信息
- 1.6.1 ‘date’ 修复当小时为1位数时的问题。
- 1.6.0 Disqus评论。外部配置文件。检查 ‘date’ 命令版本。
- 1.5.1 杂项错误修复和参数检查
- 1.5 Đurađ Radojičić (djura-san) 重构了一些代码并增加了灵活性和国际化
- 1.4.2 现在问题在Github处理
- 1.4.1 一些代码重构
- 1.4 使用twitter进行评论,改进了’rebuild’命令
- 1.3 ‘edit’ 命令
- 1.2.2 Feedburner支持
- 1.2.1 修复了时间戳错误
- 1.2 ‘list’ 命令
- 1.1 草稿和预览支持
- 1.0 阅读 http://is.gd/Bkdoru
许可证
本程序是自由软件:你可以根据自由软件基金会发布的GNU通用公共许可证(许可证版本3,或(根据你的选择)任何更新版本)的条款重新分发和/或修改它。
本程序的发布是希望它有用,但不提供任何保证;甚至没有暗示的适销性或特定用途的保证。更多细节请参见GNU通用公共许可证。
你应该已经收到了本程序附带的GNU通用公共许可证副本。如果没有,请参阅 https://www.gnu.org/licenses/。
相似文章
Shake Blog
Shake Blog 是一个使用 Shake 和 Haskell 构建静态站点生成器的入门项目,能够生成包含文章、归档和 Atom 订阅的博客。它面向希望进行分支定制开发的开发者。
用机器重建我的博客,为机器服务·
作者重建了博客,加入了完整的结构化数据标记(JSON-LD、微格式),并配备了一个由提示词引导的AI协作写作助手,该提示词避免了常见的LLM模式,同时通过CI验证防止数据损坏。
博客在 Ubuntu 16.04 上运行了 10 年,我将其迁移到了 FreeBSD
作者将其博客从一个使用了 10 年的 Ubuntu 16.04 VPS 迁移到了更具成本效益的 FreeBSD VPS,详细介绍了迁移动机、设置过程以及使用 Bastille 的 FreeBSD Jails 入门。
tweet.md
tweet.md 是一款将 X(Twitter)帖子转换为简洁 Markdown 格式的工具,可简化内容复用。
@DeRonin_: 我如何在两个文件中运行自动化内容引擎 1个 markdown 文件 = 我的知识库 1个 html 文件 = 我的仪表板 那就是整个技术栈 …
文章概述了一种创建个性化自动化内容引擎的方法:使用单个 Markdown 文件存储数据,并借助 Claude Agent 构建 HTML 仪表板,从而取代付费的 SaaS 工具。