Merge branch 'master' of github.com:carlesfe/bashblog
This commit is contained in:
commit
72b32a918f
2 changed files with 68 additions and 40 deletions
95
README.md
95
README.md
|
@ -1,65 +1,90 @@
|
|||
bashblog
|
||||
========
|
||||
|
||||
A Bash script that handles blog posting.
|
||||
A single Bash script to create blogs.
|
||||
|
||||
Some would say it's a CMS, but I don't like that word. It's just a script that lets you write a blog post with your favorite editor, puts all the posts together into an index, and creates an RSS file and a list of posts.
|
||||
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.
|
||||
|
||||
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.
|
||||
You can see it live here: [read the initial blog post](http://mmb.pcb.ub.es/~carlesfe/blog/creating-a-simple-blog-system-with-a-500-line-bash-script.html). My blog has been 100% generated using bashblog, no additional tweaking.
|
||||
|
||||
|
||||
Features
|
||||
--------
|
||||
|
||||
- No installation required. Download `bb.sh` and start blogging.
|
||||
- Ultra simple usage: Just type a post with your favorite editor and the script does the rest. No templating.
|
||||
- All content is static. You only need shell access to a machine with a public web folder.
|
||||
*Tip: advanced users could mount a remote public folder via `ftpfs` and run this script locally*
|
||||
- Allows drafts, includes a simple but clean stylesheet, generates the RSS file automatically.
|
||||
- Support for Markdown, Disqus comments, Twitter, Feedburner, Google Analytics.
|
||||
- GNU/Linux, BSD and OSX compatible out of the box (no need for GNU `coreutils` on a Mac)
|
||||
- Everything stored in a single 700-line bash script, how cool is that?! ;)
|
||||
|
||||
You can read [the initial blog post](http://mmb.pcb.ub.es/~carlesfe/blog/creating-a-simple-blog-system-with-a-500-line-bash-script.html) for more information and as a demo, as my site has been 100% generated using bashblog.
|
||||
|
||||
Usage
|
||||
-----
|
||||
|
||||
You only need SSH access to a server which allows its users to run shell scripts.
|
||||
|
||||
Copy bb.sh into a public folder of yours and run it:
|
||||
Copy bb.sh into a public folder (for example, `$HOME/public_html/blog`) and run
|
||||
|
||||
./bb.sh
|
||||
|
||||
This will show the available commands. If the file is not executable, you can either `chmod +x bb.sh`
|
||||
or run it with `bash bb.sh`
|
||||
|
||||
**Before creating a blog post, edit `bb.sh` and modify the variables in the `global_variables()` function or create a `.config` file with your configutation values**
|
||||
**Before creating your first post, you may want to configure the blog settings (title, author, etc).
|
||||
Read the Configuration section below for more information**
|
||||
|
||||
To create your first post, make sure `$EDITOR` is set, and then just do:
|
||||
To create your first post, just run:
|
||||
|
||||
./bb.sh post
|
||||
|
||||
When you're done, access the public URL for that folder and you should see the index
|
||||
file and a new page for that post!
|
||||
When you're done, access the public URL for that folder (e.g. `http://server.com/~username/blog`)
|
||||
and you should see the index file and a new page for that post!
|
||||
|
||||
Features
|
||||
--------
|
||||
|
||||
- Simple creation and edition of the posts with your favorite text editor
|
||||
- **NEW** Markdown support via a third-party library (e.g.
|
||||
Configuration
|
||||
-------------
|
||||
|
||||
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.
|
||||
|
||||
There are two ways to configure the blog strings:
|
||||
|
||||
- Edit `bb.sh` and modify the variables in the `global_variables()` function
|
||||
- Create a `.config` file with your configuration values (useful if you don't want to touch the script)
|
||||
|
||||
The software will load the values in the script first, then overwrite them with the values in the `.config` 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.
|
||||
|
||||
The format of the `.config` file is just one `variablename="value"` per line, just like in the `global_variables()`
|
||||
function. **Please remember:** quote the values, do not declare a variable with the dollar sign, do not use
|
||||
spaces around the equal sign.
|
||||
|
||||
bashblog uses the `$EDITOR` environment value to open the text editor.
|
||||
|
||||
|
||||
Detailed features
|
||||
-----------------
|
||||
|
||||
- A simple but nice and readable design, with nothing but the blog posts
|
||||
- **NEW on 2.0** Markdown support via a third-party library (e.g.
|
||||
[Markdown.pl](http://daringfireball.net/projects/markdown/)). Use
|
||||
it via `./bb.sh post -m`. The third party library must support an invokation
|
||||
like `markdown_bin in.html > out.md` as the code calls it that way.
|
||||
- Post preview
|
||||
- Save posts as drafts and resume later
|
||||
- Transformation of every post to its own html page, using the title as the URL
|
||||
- Generation of an index.html file with the latest 10 posts
|
||||
- Generation of an RSS file! Blog's magic is the RSS file, isn't it...?
|
||||
- Generation of a page with all posts, to solve the index.html pagination problem
|
||||
- Rebuilding the index files without the need to create a new entry
|
||||
- By default, comments are delegated to Twitter. Can be configured for Disqus
|
||||
- Google Analytics support
|
||||
- Feedburner support
|
||||
- Auto-generated CSS support
|
||||
- Save posts as drafts and resume editing later
|
||||
- HTML page for each post, using its title as the URL
|
||||
- Configurable number of posts on the front page
|
||||
- Automatic generation of an RSS file, feedburner support
|
||||
- Additional page containing an index of all posts
|
||||
- Rebuild all files while keeping the original data
|
||||
- Comments delegated to Twitter, with additional Disqus support
|
||||
- Google Analytics code support
|
||||
- Contains its own CSS so that everything is reasonably styled by default
|
||||
- Headers, footers, and in general everything that a well-structured html file needs
|
||||
- Support to add extra content on top of every page (e.g. banners, images, etc)
|
||||
- xhtml validation, CSS validation, RSS validation by the w3c
|
||||
- Backup of the site every time you post
|
||||
- Everything contained in a single 700-line bash script!
|
||||
- A simple but nice and readable design, with nothing but the blog posts
|
||||
- Automatic backup of the site every time you post (stored as `.backup.tar.gz`)
|
||||
|
||||
Read the CHANGELOG section of the script header for more updates
|
||||
|
||||
Future ideas
|
||||
------------
|
||||
|
||||
This software is still maintained, however, it can be considered more or less finished.
|
||||
It has been used by many people and no bugs have been found, but if you happen to find one,
|
||||
please report it.
|
||||
|
|
13
bb.sh
13
bb.sh
|
@ -64,6 +64,8 @@
|
|||
#
|
||||
#########################################################################################
|
||||
#
|
||||
# 2.0.2 Fixed bug when $body_begin_file was empty
|
||||
# Added extra line in the footer linking to the github project
|
||||
# 2.0.1 Allow personalized header/footer files
|
||||
# 2.0 Added Markdown support
|
||||
# Fully support BSD date
|
||||
|
@ -107,7 +109,7 @@ global_config=".config"
|
|||
# by the 'global_config' file contents
|
||||
global_variables() {
|
||||
global_software_name="BashBlog"
|
||||
global_software_version="2.0.1"
|
||||
global_software_version="2.0.2"
|
||||
|
||||
# Blog title
|
||||
global_title="My fancy blog"
|
||||
|
@ -303,7 +305,7 @@ edit() {
|
|||
twitter() {
|
||||
[[ -z "$global_twitter_username" ]] && return
|
||||
|
||||
if [[ "$global_disqus_username" ]]; then
|
||||
if [[ -z "$global_disqus_username" ]]; then
|
||||
echo "<p id='twitter'>$template_comments "
|
||||
else
|
||||
echo "<p id='twitter'><a href=\"$1#disqus_thread\">$template_comments</a> "
|
||||
|
@ -342,7 +344,7 @@ create_html_page() {
|
|||
google_analytics >> "$filename"
|
||||
echo "</head><body>" >> "$filename"
|
||||
# stuff to add before the actual body content
|
||||
cat "$body_begin_file" >> "$filename"
|
||||
[[ -n "$body_begin_file" ]] && cat "$body_begin_file" >> "$filename"
|
||||
# body divs
|
||||
echo '<div id="divbodyholder">' >> "$filename"
|
||||
echo '<div class="headerholder"><div class="header">' >> "$filename"
|
||||
|
@ -649,7 +651,8 @@ create_includes() {
|
|||
if [[ -f "$footer_file" ]]; then cp "$footer_file" .footer.html
|
||||
else
|
||||
protected_mail="$(echo "$global_email" | sed 's/@/\@/g' | sed 's/\./\./g')"
|
||||
echo '<div id="footer">'$global_license '<a href="'$global_author_url'">'$global_author'</a> — <a href="mailto:'$protected_mail'">'$protected_mail'</a></div>' >> ".footer.html"
|
||||
echo '<div id="footer">'$global_license '<a href="'$global_author_url'">'$global_author'</a> — <a href="mailto:'$protected_mail'">'$protected_mail'</a><br/>' >> ".footer.html"
|
||||
echo 'Generated with <a href="https://github.com/cfenollosa/bashblog">bashblog</a>, a single bash script to easily create blogs like this one</div>' >> ".footer.html"
|
||||
fi
|
||||
}
|
||||
|
||||
|
@ -709,7 +712,7 @@ rebuild_all_entries() {
|
|||
echo -n "Rebuilding all entries "
|
||||
|
||||
for i in *.html; do # no need to sort
|
||||
if [[ "$i" == "$index_file" ]] || [[ "$i" == "$archive_index" ]]; then continue; fi
|
||||
if [[ "$i" == "$index_file" ]] || [[ "$i" == "$archive_index" ]] || [[ "$i" == "$footer_file" ]] || [[ "$i" == "$header_file" ]]; then continue; fi
|
||||
contentfile=".tmp.$RANDOM"
|
||||
while [ -f "$contentfile" ]; do contentfile=".tmp.$RANDOM"; done
|
||||
|
||||
|
|
Loading…
Reference in a new issue