Move intro to blog

This commit is contained in:
Kevin van Zonneveld 2013-02-26 00:30:30 +01:00
parent 6aadcb3222
commit bd844228f9

View File

@ -10,74 +10,26 @@ Here's an attempt to bundle those things in a generalized way so that
they are reusable as-is in most of my (and hopefully your, if not ping they are reusable as-is in most of my (and hopefully your, if not ping
me) programs. me) programs.
## Goals An up to date [intro is found on my blog](http://kvz.io/blog/2013/02/26/introducing-bash3boilerplate/).
I'm going to be pragmatic and violate good practices like DRY ## Contributing
and the things I know about sourcing files, git submodules,
package management, etc.
I feel that when a program consists of multiple files, BASH Feel free to fork this project. We will happily merge bug fixes or other small
may very well not be the right tool for the job. improvements. For bigger changes you should probably get in touch with us
before you start to avoid not seeing them merged.
Copy-pasting, and removing what you don't need may not seem ## Versioning
very rocket-scientific, or 2013, but in fact neither is BASH.
Keeping things simple, small and lightweight should be key Discourse implements the Semantic Versioning guidelines.
here.
Aiming for portability I'm targetting BASH 3 (OSX still ships Releases will be numbered with the following format:
with v3 for instance). If you're going to ask people to install
BASH 4 first, you might as well pick a better language as a
dependency and code up your script in that.
The main template shoud only have features that are needed `<major>.<minor>.<patch>`
80% of the time you write BASH.
Other cool functions can be adopted into this repository, And constructed with the following guidelines:
but should not be referenced by the `main.sh` template and function
purely as a resource.
## Features * Breaking backward compatibility bumps the major (and resets the minor and patch)
* New additions without breaking backward compatibility bumps the minor (and resets the patch)
- Structure * Bug fixes and misc changes bumps the patch
- Configuration by environment variables
- Configuration by commandline arguments (definitions parsed from help info,
so no duplication needed)
- Magic variables like __FILE__ and __DIR__
- Logging that supports colors and is compatible with [Syslog Severity levels](http://en.wikipedia.org/wiki/Syslog#Severity_levels)
## Conventions
It's the task of the script's **caller** to:
- Redirect the output to appropriate locations
- Correctly set the PATH variable (think [cronjobs](http://kvz.io/blog/2007/07/29/schedule-tasks-on-linux-using-crontab/))
## Recommendations
- Use spaces vs tabs so you can copy-paste parts directly into
the console, without BASH's automcomplete firing on every tab
character
- Use `set -eu`, so it will break on every error
and undefined variable. if you're expecting an error, add `||true`
to your command.
Using `set -eu` over the interpreter `#!/bin/bash -eu` makes
sure the flags are respected even when your script is called like `bash main.sh`.
- Checkout [The 10 Commandments of Logging](http://www.masterzen.fr/2013/01/13/the-10-commandments-of-logging/)
## Notes
- Use `emergency` to exit with 1
## Compile
For those who want the template to get out of there way, I'm also
shipping a compiled version that removes some comments, puts
more things on one line, etc. For readability and boilerplate development, use the
bigger version.
## Fork
I'm looking forward to your comments and pull requests!
On [github](http://github.com/kvz/bash3boilerplate)
For more information on SemVer, please visit http://semver.org/.