,, ,, ,, ,,
`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'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.
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/installInstall 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.shVerify /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'
} | prettytableOutput:
+-----------+----------+----------+
|ID |NAME |TITLE |
+-----------+----------+----------+
|123456789 |John Foo |Director |
|12 |Mike Bar |Engineer |
+-----------+----------+----------+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.
shellbase is copyright David Rabkin and available under a
Zero-Clause BSD license.