,, ,, ,, ,,
`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.
This framework is mostly POSIX-compliant,
Portable Operating System Interface for uniX, ensuring compatibility across
Unix-like systems.
It offers a range of essential services, including public functions such as
logger and multiple validations, signal handling, garbage collection, and
support for multiple instances.
The shellbase defines global variables and functions.
All functions without base_ prefix are public and could 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 BASE_ prefix and clients could use them.
Clients should place temporary files under $BASE_WIP.
All functions started with base_ prefix are internal and should not be used
by clients.
The names are arranged 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 [email protected]:rdavid/shellbase.git &&
./shellbase/app/installInstall the file from the released version.
Some operating systems demands administrative rights to install to
/usr/local/bin, use sudo or doas before tar:
REL=0.9.20251010
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.20251010
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.