123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 |
- <!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>
|