Skip to content

granders/bash3boilerplate

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

53 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

bash3boilerplate

Build Status Gittip donate button Flattr donate button PayPayl donate button BitCoin donate button

When hacking up BASH scripts, I often find there are some higherlevel things like logging, configuration, commandline argument parsing that:

  • I need everytime
  • Take quite some effort to get right
  • Keep you from your actual work

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 me) programs.

An up to date intro is found on my blog.

Installation

There are 3 ways you can install (parts of) b3bp:

  1. Just get the main template: wget https://raw.githubusercontent.com/kvz/bash3boilerplate/master/main.sh
  2. Clone the entire project: git clone git@github.com:kvz/bash3boilerplate.git
  3. As of v1.0.3, b3bp can be installed as a package.json dependency via: npm install --save bash3boilerplate

Although 3 introduces a node.js dependency, this does allow for easy version pinning & distrubtions in environments that already have this prerequisite. But nothing prevents you from just using curl and keep your project or build system low on external dependencies.

Versioning

This project implements the Semantic Versioning guidelines.

Releases will be numbered with the following format:

<major>.<minor>.<patch>

And constructed with the following guidelines:

  • 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)
  • Bug fixes and misc changes bumps the patch

For more information on SemVer, please visit http://semver.org.

Best practices

As of v1.0.3, b3bp adds some nice re-usable libraries in ./src. Later on we'll be using snippets inside this directory to build custom packages. In order to make the snippets in ./src more useful, we recommend these guidelines.

Library exports

It's nice to have a bash package that can be used in the terminal and also be invoked as a command line function. To achieve this the exporting of your functionality should follow this pattern:

if [ "${BASH_SOURCE[0]}" != ${0} ]; then
  export -f my_script
else
  my_script "${@}"
  exit $?
fi

This allows a user to source your script or invoke as a script.

# Running as a script
$ ./my_script.sh some args --blah
# Sourcing the script
$ source my_script.sh
$ my_script some more args --blah

(taken from the bpkg project)

Todo

  • Make src libs adhere to Best practices
  • make build system for generating custom builds
  • tests & releases via Travis

License

Copyright (c) 2013 Kevin van Zonneveld, http://kvz.io
Licensed under MIT: http://kvz.io/licenses/LICENSE-MIT

About

Copypastable templates to write better bash scripts

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Shell 98.1%
  • Makefile 1.9%