Skip to content

rdavid/shellbase

Repository files navigation

Shellbase

             ,,                 ,,    ,,  ,,
           `7MM               `7MM  `7MM *MM
             MM                 MM    MM  MM
    ,pP"Ybd  MMpMMMb.  .gP"Ya   MM    MM  MM,dMMb.   ,6"Yb.  ,pP"Ybd  .gP"Ya
    8I   `"  MM    MM ,M'   Yb  MM    MM  MM    `Mb 8)   MM  8I   `" ,M'   Yb
    `YMMMa.  MM    MM 8M""""""  MM    MM  MM     M8  ,pm9MM  `YMMMa. 8M""""""
    L.   I8  MM    MM YM.    ,  MM    MM  MM.   ,M9 8M   MM  L.   I8 YM.    ,
    M9mmmP'.JMML  JMML.`Mbmmd'.JMML..JMML.P^YbmdP'  `Moo9^Yo.M9mmmP'  `Mbmmd'

text bsd text lnx test mac hits of code release license

About

The shellbase framework serves as a foundation for Unix shell scripts. It is mostly POSIX-compliant (Portable Operating System Interface for uniX), which helps keep it compatible across Unix-like systems. It offers essential services, including logging, validation helpers, signal handling, garbage collection, and support for multiple instances.

shellbase defines global variables and functions. All functions without the base_ prefix are public and can be used by clients. The public functions are, in alphabetical order: aud_only, beroot, beuser, bomb, cheat, cmd_exists, chrono_get, chrono_sta, chrono_sto, cya, die, dng2jpg, echo, ellipsize, file_exists, gitlog, grbt, handle_pipefails, heic2jpg, inside, isempty, isfunc, isnumber, isreadable, isroot, issolid, iswritable, log, loge, logw, map_del, map_get, map_put, pdf2jpg, pdf2png, prettytable, prettyuptime, realdir, realpath, semver, should_continue, timestamp, tolog, tologe, tolower, totsout, tsout, url_exists, user_exists, validate_cmd, validate_var, var_exists, ver_ge, vid2aud, ytda.

Global variables have the BASE_ prefix and can be used by clients. Clients should place temporary files under $BASE_WIP. All functions starting with the base_ prefix are internal and should not be used by clients. Names are listed in alphabetical order.

See dotfiles, gento, pulse, and toolbox as example projects that use this framework.

Install

The artifact is a single non-executable POSIX-compliant shell script file base.sh. Install the file from the repository:

git clone git@github.com:rdavid/shellbase.git &&
  ./shellbase/app/install

Install the file from the released version. Some operating systems demand administrative rights to install to /usr/local/bin; use sudo or doas before tar:

REL=0.9.20251111
SRC=https://github.com/rdavid/shellbase/archive/refs/tags/v$REL.tar.gz
curl --location --silent $SRC |
  tar \
    --directory /usr/local/bin \
    --extract \
    --gzip \
    --strip-components=2 \
    shellbase-$REL/lib/base.sh

Using

Verify /usr/local/bin is in your PATH. Then your script can use shellbase:

#!/bin/sh
# shellcheck disable=SC1091 # File not following.
. base.sh
log I\'m using the shellbase.

You can try shellbase without installation:

#!/bin/sh
REL=0.9.20251111
SRC=https://github.com/rdavid/shellbase/archive/refs/tags/v$REL.tar.gz
eval "$(
  curl --location --silent $SRC |
    tar \
      --extract \
      --gzip \
      --to-stdout \
      shellbase-$REL/lib/base.sh
)"
log I\'m using the shellbase.

prettytable example:

. base.sh
{
  printf 'ID\tNAME\tTITLE\n'
  printf '123456789\tJohn Foo\tDirector\n'
  printf '12\tMike Bar\tEngineer\n'
} | prettytable

Output:

+-----------+----------+----------+
|ID         |NAME      |TITLE     |
+-----------+----------+----------+
|123456789  |John Foo  |Director  |
|12         |Mike Bar  |Engineer  |
+-----------+----------+----------+

Test

The project uses Daniel J. Bernstein’s build system redo. You can install Sergey Matveev’s goredo implementation. redo lint applies the following linters to the source files: actionlint, checkmake, hadolint, reuse, shellcheck, shfmt, typos, vale, yamllint. redo test runs unit tests in installed shells. redo test-container runs the tests across various shells in containers. It uses David Rabkin's goredoer to build goredo.

License

shellbase is copyright David Rabkin and available under a Zero-Clause BSD license.

About

The framework is specifically designed for Unix shell scripts.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors