diff --git a/README.md b/README.md index 7f5791f..ed2b6f4 100644 --- a/README.md +++ b/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. diff --git a/bb.sh b/bb.sh index af23710..665622f 100755 --- a/bb.sh +++ b/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 "

$template_comments " else echo "

$template_comments  " @@ -342,7 +344,7 @@ create_html_page() { google_analytics >> "$filename" echo "" >> "$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 '

' >> "$filename" echo '
' >> "$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 '' >> ".footer.html" + echo '' >> ".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