231 lines
12 KiB
HTML
231 lines
12 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta charset='utf-8'>
|
|
<meta http-equiv="X-UA-Compatible" content="chrome=1">
|
|
|
|
<link rel="stylesheet" type="text/css" href="stylesheets/stylesheet.css" media="screen">
|
|
<link rel="stylesheet" type="text/css" href="stylesheets/github-dark.css" media="screen">
|
|
<link rel="stylesheet" type="text/css" href="stylesheets/print.css" media="print">
|
|
|
|
<title>Bashblog by cfenollosa</title>
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<header>
|
|
<div class="container">
|
|
<h1>Bashblog</h1>
|
|
<h2>A Bash script that handles blog posting</h2>
|
|
|
|
<section id="downloads">
|
|
<a href="https://github.com/cfenollosa/bashblog/zipball/master" class="btn">Download as .zip</a>
|
|
<a href="https://github.com/cfenollosa/bashblog/tarball/master" class="btn">Download as .tar.gz</a>
|
|
<a href="https://github.com/cfenollosa/bashblog" class="btn btn-github"><span class="icon"></span>View on GitHub</a>
|
|
</section>
|
|
</div>
|
|
</header>
|
|
|
|
<div class="container">
|
|
<section id="main_content">
|
|
<h1>
|
|
<a id="bashblog" class="anchor" href="#bashblog" aria-hidden="true"><span class="octicon octicon-link"></span></a>bashblog</h1>
|
|
|
|
<p>A single Bash script to create blogs. </p>
|
|
|
|
<p>I created it because I wanted a very, very simple way to post entries to a blog by using a public folder on my server, without any special requirements and dependencies. Works on GNU/Linux, OSX and BSD.</p>
|
|
|
|
<p><em>How simple? Just type <code>./bb.sh post</code> and start writing your blogpost.</em></p>
|
|
|
|
<p>You can see it live here: <a href="https://web.archive.org/web/20130520204024/http://mmb.pcb.ub.es/%7Ecarlesfe/blog/creating-a-simple-blog-system-with-a-500-line-bash-script.html">read the initial blog post</a>. That page was 100% generated using bashblog, no additional tweaking.</p>
|
|
|
|
<p><a href="https://raw.githubusercontent.com/cfenollosa/bashblog/gh-pages/images/demo.png"><img src="https://raw.githubusercontent.com/cfenollosa/bashblog/gh-pages/images/demo_thumb.png" alt="demo"></a></p>
|
|
|
|
<h2>
|
|
<a id="usage" class="anchor" href="#usage" aria-hidden="true"><span class="octicon octicon-link"></span></a>Usage</h2>
|
|
|
|
<p>Download the code and copy bb.sh into a public folder (for example, <code>$HOME/public_html/blog</code>) and run</p>
|
|
|
|
<pre><code>./bb.sh
|
|
</code></pre>
|
|
|
|
<p>This will show the available commands. If the file is not executable, type <code>chmod +x bb.sh</code> and retry.</p>
|
|
|
|
<p><strong>Before creating your first post, you may want to configure the blog settings (title, author, etc).
|
|
Read the Configuration section below for more information</strong></p>
|
|
|
|
<p>To create your first post, just run:</p>
|
|
|
|
<pre><code>./bb.sh post
|
|
</code></pre>
|
|
|
|
<p>It will try to use Markdown, if installed. To force HTML:</p>
|
|
|
|
<pre><code>./bb.sh post -html
|
|
</code></pre>
|
|
|
|
<p>The script will handle the rest.</p>
|
|
|
|
<p>When you're done, access the public URL for that folder (e.g. <code>http://server.com/~username/blog</code>)
|
|
and you should see the index file and a new page for that post!</p>
|
|
|
|
<h2>
|
|
<a id="features" class="anchor" href="#features" aria-hidden="true"><span class="octicon octicon-link"></span></a>Features</h2>
|
|
|
|
<ul>
|
|
<li>Ultra simple usage: Just type a post with your favorite editor and the script does the rest. No templating.</li>
|
|
<li>No installation required. Download <code>bb.sh</code> and start blogging.</li>
|
|
<li>Zero dependencies. It runs just on base utils (<code>date</code>, <code>basename</code>, <code>grep</code>, <code>sed</code>, <code>head</code>, etc)</li>
|
|
<li>GNU/Linux, BSD and OSX compatible out of the box, no need for GNU <code>coreutils</code> on a Mac.
|
|
It does some magic to autodetect which command switches it needs to run depending on your system.</li>
|
|
<li>All content is static. You only need shell access to a machine with a public web folder.
|
|
<em>Tip: advanced users could mount a remote public folder via <code>ftpfs</code> and run this script locally</em>
|
|
</li>
|
|
<li>Allows drafts, includes a simple but clean stylesheet, generates the RSS file automatically.</li>
|
|
<li>Support for tags/categories</li>
|
|
<li>Support for Markdown, Disqus comments, Twitter, Feedburner, Google Analytics.</li>
|
|
<li>The project is still maintained as of 2016. Bugs are fixed, and new features are considered (see "Contributing")</li>
|
|
<li>Everything stored in a single ~1k lines bash script, how cool is that?! ;) </li>
|
|
</ul>
|
|
|
|
<h2>
|
|
<a id="configuration" class="anchor" href="#configuration" aria-hidden="true"><span class="octicon octicon-link"></span></a>Configuration</h2>
|
|
|
|
<p>Configuration is not required for a test drive, but if you plan on running your blog with bashblog, you will
|
|
want to change the default titles, author names, etc, to match your own.</p>
|
|
|
|
<p>There are two ways to configure the blog strings:</p>
|
|
|
|
<ul>
|
|
<li>Edit <code>bb.sh</code> and modify the variables in the <code>global_variables()</code> function</li>
|
|
<li>Create a <code>.config</code> file with your configuration values -- useful if you don't want to touch the script and be able to update it regularly with git</li>
|
|
</ul>
|
|
|
|
<p>The software will load the values in the script first, then overwrite them with the values in the <code>.config</code> file.
|
|
This means that you don't need to define all variables in the config file, only those which you need to override
|
|
from the defaults.</p>
|
|
|
|
<p>The format of the <code>.config</code> file is just one <code>variablename="value"</code> per line, just like in the <code>global_variables()</code>
|
|
function. <strong>Please remember:</strong> quote the values, do not declare a variable with the dollar sign, do not use
|
|
spaces around the equal sign.</p>
|
|
|
|
<p>bashblog uses the <code>$EDITOR</code> environment value to open the text editor.</p>
|
|
|
|
<h2>
|
|
<a id="detailed-features" class="anchor" href="#detailed-features" aria-hidden="true"><span class="octicon octicon-link"></span></a>Detailed features</h2>
|
|
|
|
<ul>
|
|
<li>A simple but nice and readable design, with nothing but the blog posts</li>
|
|
<li>
|
|
<strong>NEW on 2.0</strong> Markdown support via a third-party library.<br>
|
|
The easiest method is to download
|
|
Gruber's <a href="http://daringfireball.net/projects/markdown/">Markdown.pl</a>
|
|
</li>
|
|
<li>Post preview</li>
|
|
<li>Save posts as drafts and resume editing later</li>
|
|
<li>HTML page for each post, using its title as the URL</li>
|
|
<li>Configurable number of posts on the front page</li>
|
|
<li>Automatic generation of an RSS file, feedburner support</li>
|
|
<li>Additional page containing an index of all posts</li>
|
|
<li>Automatically generates pages for each tag</li>
|
|
<li>Rebuild all files while keeping the original data</li>
|
|
<li>Comments delegated to Twitter, with additional Disqus support</li>
|
|
<li>An option for cookieless Twitter sharing, to comply with the
|
|
<a href="https://github.com/cfenollosa/eu-cookie-law">EU cookie law</a>
|
|
</li>
|
|
<li>Google Analytics code support</li>
|
|
<li>Contains its own CSS so that everything is reasonably styled by default</li>
|
|
<li>Headers, footers, and in general everything that a well-structured html file needs</li>
|
|
<li>Support to add extra content on top of every page (e.g. banners, images, etc)</li>
|
|
<li>xhtml validation, CSS validation, RSS validation by the w3c</li>
|
|
<li>Automatic backup of the site every time you post (stored as <code>.backup.tar.gz</code>)</li>
|
|
</ul>
|
|
|
|
<p>Read the Changelog section for more updates or <a href="http://cfenollosa.com/blog/tag_bashblog.html">check out the news on my blog</a></p>
|
|
|
|
<h2>
|
|
<a id="contributing" class="anchor" href="#contributing" aria-hidden="true"><span class="octicon octicon-link"></span></a>Contributing</h2>
|
|
|
|
<p>Bashblog started at 500 SLOC and it now has hit the 1000 SLOC barrier.
|
|
If we want to keep the code minimal and understandable, we need to make the difficult effort to restrain ourselves
|
|
from adding too many features.</p>
|
|
|
|
<p>All bugfixes are welcome, but brand new features need to be strongly justified to get into the main tree.
|
|
Every new request will be honestly and civilly discussed on the comments.
|
|
As a guideline, pull requests should:</p>
|
|
|
|
<ul>
|
|
<li>Fix a use case for some people (e.g. internationalization)</li>
|
|
<li>Add a use case which is arguably very common (e.g. disqus integration for comments)</li>
|
|
<li>Be very small when possible (a couple lines of code)</li>
|
|
<li>Don't require a significant rewrite of the code (Don't break <code>create_html_file()</code> or <code>write_entry()</code>, etc)</li>
|
|
<li>It must work on Linux, BSD and Mac. Beware of using GNU coreutils with non-POSIX flags (i.e. <code>date</code> or <code>grep</code>)</li>
|
|
<li>Follow the UNIX philosophy: do one thing and do it well, rely on third party software for external features, etc</li>
|
|
<li>
|
|
<strong>Always</strong> keep backwards compatibility when using the default configuration</li>
|
|
</ul>
|
|
|
|
<h2>
|
|
<a id="changelog" class="anchor" href="#changelog" aria-hidden="true"><span class="octicon octicon-link"></span></a>Changelog</h2>
|
|
|
|
<ul>
|
|
<li>2.5 Massive code cleanup by Martijn Dekker<br>
|
|
'tags' command<br>
|
|
The word 'posts' in the tag list (both website and command) now has a singular form, check out <code>template_tags_posts_singular</code>
|
|
</li>
|
|
<li>2.4 Added Twitter summaries metadata for posts (#36)</li>
|
|
<li>2.3.3 Removed big comment header.<br>
|
|
Added option to display tags for cut articles on index pages (#61)<br>
|
|
Cleaned up "all posts" page (#57)</li>
|
|
<li>2.3.2 Option to use topsy instead of twitter for references</li>
|
|
<li>2.3.1 Cookieless Twitter option</li>
|
|
<li>2.3 Intelligent tag rebuilding and Markdown by default</li>
|
|
<li>2.2 Flexible post title -> filename conversion</li>
|
|
<li>2.1 Support for tags/categories.<br>
|
|
'delete' command</li>
|
|
<li>2.0.3 Support for other analytics code, via external file</li>
|
|
<li>2.0.2 Fixed bug when $body_begin_file was empty.<br>
|
|
Added extra line in the footer linking to the github project</li>
|
|
<li>2.0.1 Allow personalized header/footer files</li>
|
|
<li>2.0 Added Markdown support.<br>
|
|
Fully support BSD date</li>
|
|
<li>1.6.4 Fixed bug in localized dates</li>
|
|
<li>1.6.3 Now supporting BSD date</li>
|
|
<li>1.6.2 Simplified some functions and variables to avoid duplicated information</li>
|
|
<li>1.6.1 'date' fix when hours are 1 digit.</li>
|
|
<li>1.6.0 Disqus comments. External configuration file. Check of 'date' command version.</li>
|
|
<li>1.5.1 Misc bugfixes and parameter checks</li>
|
|
<li>1.5 Đurađ Radojičić (djura-san) refactored some code and added flexibility and i18n</li>
|
|
<li>1.4.2 Now issues are handled at Github</li>
|
|
<li>1.4.1 Some code refactoring</li>
|
|
<li>1.4 Using twitter for comments, improved 'rebuild' command</li>
|
|
<li>1.3 'edit' command</li>
|
|
<li>1.2.2 Feedburner support</li>
|
|
<li>1.2.1 Fixed the timestamps bug</li>
|
|
<li>1.2 'list' command</li>
|
|
<li>1.1 Draft and preview support</li>
|
|
<li>1.0 Read <a href="http://is.gd/Bkdoru">http://is.gd/Bkdoru</a>
|
|
</li>
|
|
</ul>
|
|
|
|
<h2>
|
|
<a id="license" class="anchor" href="#license" aria-hidden="true"><span class="octicon octicon-link"></span></a>License</h2>
|
|
|
|
<p>This program is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
(at your option) any later version.</p>
|
|
|
|
<p>This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.</p>
|
|
|
|
<p>You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <a href="http://www.gnu.org/licenses/">http://www.gnu.org/licenses/</a>.</p>
|
|
</section>
|
|
</div>
|
|
|
|
|
|
</body>
|
|
</html>
|