Bashblog – 一个用于创建博客的单一 bash 脚本

Hacker News Top 工具

摘要

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 开始写博客。
  • 零依赖。仅基于基础工具运行(datebasenamegrepsedhead 等)
  • 开箱即用,兼容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(例如 dategrep
  • 遵循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

Lobsters Hottest

Shake Blog 是一个使用 Shake 和 Haskell 构建静态站点生成器的入门项目,能够生成包含文章、归档和 Atom 订阅的博客。它面向希望进行分支定制开发的开发者。

用机器重建我的博客,为机器服务·

Lobsters Hottest

作者重建了博客,加入了完整的结构化数据标记(JSON-LD、微格式),并配备了一个由提示词引导的AI协作写作助手,该提示词避免了常见的LLM模式,同时通过CI验证防止数据损坏。

tweet.md

Product Hunt

tweet.md 是一款将 X(Twitter)帖子转换为简洁 Markdown 格式的工具,可简化内容复用。