bashsmith icon indicating copy to clipboard operation
bashsmith copied to clipboard

A template for smithing Bash scripts.

:toc: macro :toclevels: 5 :figure-caption!:

= Bashsmith

Bashsmith is a project template for smithing new link:https://www.gnu.org/software/bash[Bash] shell-based projects based on best practices. This project is meant to be cloned and customized for your specific shell scripting needs giving you a foundation from which to get started faster than with an empty slate.

toc::[]

== Features

  • Provides default project structure for creating new Bash projects.
  • Provides default settings for making Bash scripts easier to develop and debug.

== Requirements

  • link:https://www.gnu.org/software/bash[Bash]

== Setup

To install, run:

[source,bash]

git clone https://github.com/bkuhlmann/bashsmith.git cd bashsmith git checkout 6.1.0

== Usage

=== File Structure

All files located within this project provide the basic structure/blueprint for creating new Bash script projects. The structure is organized as follows:

.... ├── CHANGES.adoc # The details of past version releases. ├── CODE_OF_CONDUCT.adoc # Guidelines for encouraging harassment-free contributions. ├── CONTRIBUTING.adoc # The details of how to contribute to the project. ├── LICENSE.adoc # The license and copyright legalities of the project. ├── README.adoc # The project overview, setup, usage, testing, etc. ├── bin # A folder for executable Bash scripts. │   └── run # The main run script (which loads the lib and settings). ├── lib # A folder for Bash functions and custom code. │   └── cli.sh # Provides CLI prompt options for the main run script. ├── settings # The global/project settings for easy manipulation/tweaking. │   └── main.sh # The global settings (set with safe defaults). ....

=== Template

The following documents what each template option is:

[source,bash]

Exit, with error message, when attempting to use an undefined variable.

Alias: set -u.

set -o nounset

Abort script at first error when a command exits with non-zero status.

Alias: set -e.

set -o errexit

Return exit status of the last command in the pipe that returned a non-zero return value.

set -o pipefail

Defines newlines and tabs as delimiters for splitting words and iterating arrays.

IFS=$'\n\t'

=== Debugging

For debugging purposes, you can add the following option:

[source,bash]

Prints all executed commands.

Alias: set -x.

set -o xtrace

The above is useful for debugging purposes but probably not something you want always enabled.

💡 For additional options, use help set to learn more.

== Development

To contribute, run:

[source,bash]

git clone https://github.com/bkuhlmann/bashsmith.git cd bashsmith

== Tests

Consider using link:https://github.com/sstephenson/bats[Bats].

== link:https://alchemists.io/policies/license[License]

== link:https://alchemists.io/policies/security[Security]

== link:https://alchemists.io/policies/code_of_conduct[Code of Conduct]

== link:https://alchemists.io/policies/contributions[Contributions]

== link:https://alchemists.io/projects/bashsmith/versions[Versions]

== link:https://alchemists.io/community[Community]

== Credits

Engineered by link:https://alchemists.io/team/brooke_kuhlmann[Brooke Kuhlmann].