,, ,, ,, ,,
`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
,
echo
,
file_exists
,
grbt
,
handle_pipefails
,
heic2jpg
,
inside
,
isempty
,
isfunc
,
isnumber
,
isreadable
,
issolid
,
iswritable
,
log
,
loge
,
logw
,
map_del
,
map_get
,
map_put
,
pdf2jpg
,
pdf2png
,
prettytable
,
prettyuptime
,
realdir
,
realpath
,
semver
,
timestamp
,
tolog
,
tologe
,
tolower
,
totsout
,
tsout
,
url_exists
,
user_exists
,
validate_cmd
,
validate_var
,
var_exists
,
ver_ge
,
vid2aud
,
yes_to_continue
,
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 git@github.com:rdavid/shellbase.git &&
./shellbase/app/install
Install 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.20240707
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
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.20240707
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 |
+-----------+----------+----------+
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:
checkmake
, hadolint
,
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.