2014-02-12 14:34:09 +00:00
|
|
|
sbase - suckless unix tools
|
|
|
|
===========================
|
|
|
|
|
|
|
|
sbase is a collection of unix tools that are inherently portable
|
|
|
|
across UNIX and UNIX-like systems.
|
|
|
|
|
2015-03-23 15:22:00 +00:00
|
|
|
The following tools are implemented:
|
2014-11-20 23:01:56 +00:00
|
|
|
|
2015-03-23 15:22:00 +00:00
|
|
|
'#' -> UTF-8 support, '=' -> Implicit UTF-8 support, '*' -> Finished,
|
|
|
|
'|' -> Audited, 'o' -> POSIX 2013 compliant, 'x' -> Non-POSIX,
|
|
|
|
'()' -> Petty flag
|
|
|
|
|
2015-08-04 10:59:04 +00:00
|
|
|
UTILITY MISSING
|
|
|
|
------- -------
|
2015-03-27 16:22:48 +00:00
|
|
|
=*|o basename .
|
|
|
|
=*|o cal .
|
|
|
|
=*|o cat .
|
|
|
|
=*|o chgrp .
|
|
|
|
=*|o chmod .
|
|
|
|
=*|o chown .
|
2015-03-23 15:22:00 +00:00
|
|
|
=*|x chroot .
|
2015-03-27 16:22:48 +00:00
|
|
|
=*|o cksum .
|
|
|
|
=*|o cmp .
|
2015-03-23 15:22:00 +00:00
|
|
|
#*|x cols .
|
2015-03-27 16:22:48 +00:00
|
|
|
=*|o comm .
|
|
|
|
=*|o cp (-i)
|
2015-03-23 15:22:00 +00:00
|
|
|
=*|x cron .
|
2015-03-27 16:22:48 +00:00
|
|
|
#*|o cut .
|
|
|
|
=*|o date .
|
|
|
|
=*|o dirname .
|
|
|
|
=*|o du .
|
|
|
|
=*|o echo .
|
|
|
|
=*|o env .
|
|
|
|
#*|o expand .
|
|
|
|
#*|o expr .
|
|
|
|
=*|o false .
|
2015-08-04 18:42:55 +00:00
|
|
|
= find .
|
2015-03-27 16:22:48 +00:00
|
|
|
#*|o fold .
|
|
|
|
=* o grep .
|
|
|
|
=*|o head .
|
2015-03-23 15:22:00 +00:00
|
|
|
=*|x hostname .
|
2015-04-20 10:23:20 +00:00
|
|
|
=* o join .
|
2015-03-27 16:22:48 +00:00
|
|
|
=*|o kill .
|
|
|
|
=*|o link .
|
|
|
|
=*|o ln .
|
|
|
|
=*|o logger .
|
|
|
|
=*|o logname .
|
|
|
|
#* o ls (-C, -k, -m, -p, -s, -x)
|
2015-03-23 15:22:00 +00:00
|
|
|
=*|x md5sum .
|
2015-03-27 16:22:48 +00:00
|
|
|
=*|o mkdir .
|
|
|
|
=*|o mkfifo .
|
2015-03-23 15:22:00 +00:00
|
|
|
=*|x mktemp .
|
2015-03-27 16:22:48 +00:00
|
|
|
=*|o mv (-i)
|
|
|
|
=*|o nice .
|
|
|
|
#*|o nl .
|
|
|
|
=*|o nohup .
|
|
|
|
#*|o paste .
|
2015-03-23 15:22:00 +00:00
|
|
|
=*|x printenv .
|
2015-03-27 16:22:48 +00:00
|
|
|
#*|o printf .
|
|
|
|
=*|o pwd .
|
2015-03-23 15:22:00 +00:00
|
|
|
=*|x readlink .
|
2015-03-27 16:22:48 +00:00
|
|
|
=*|o renice .
|
|
|
|
=*|o rm (-i)
|
|
|
|
=*|o rmdir .
|
2015-08-04 18:42:55 +00:00
|
|
|
# sed .
|
2015-03-23 15:22:00 +00:00
|
|
|
=*|x seq .
|
|
|
|
=*|x setsid .
|
|
|
|
=*|x sha1sum .
|
|
|
|
=*|x sha256sum .
|
|
|
|
=*|x sha512sum .
|
2015-03-27 16:22:48 +00:00
|
|
|
=*|o sleep .
|
Audit sort(1) and mark it as finished
1) Remove the function prototypes. No need for them, as the
functions are ordered.
2) Add fieldseplen, so the length of the field-separator is not
calculated nearly each time skipcolumn() is called.
3) rename next_col to skip_to_next_col so the purpose is clear,
also reorder the conditional accordingly.
4) Put parentheses around certain ternary expressions.
5) BUGFIX: Don't just exit() in check(), but make it return something,
so we can cleanly fshut() everything.
6) OFF-POSIX: Posix for no apparent reason does not allow more than
one file when the -c or -C flags are given.
This can be problematic when you want to check multiple files.
With the change 5), rewriting check() to return a value, I went
off-posix after discussing this with Dimitris to just allow
arbitrary numbers of files. Obviously, this does not break scripts
and is convenient for everybody who wants to quickly check a big
amount of files.
As soon as 1 file is "unsorted", the return value is 1, as expected.
For convenience reasons, check()'s warning now includes the filename.
7) BUGFIX: Set ret to 2 instead of 1 when the fshut(fp, *argv) fails.
8) BUGFIX: Don't forget to fshut stderr at the end. This would improperly
return 1 in the following case:
$ sort -c unsorted_file 2> /dev/full
9) Other style changes, line length, empty line before return.
2015-08-04 10:45:59 +00:00
|
|
|
#*|o sort (-d, -f, -i)
|
2015-03-27 16:22:48 +00:00
|
|
|
=*|o split .
|
2015-03-23 15:22:00 +00:00
|
|
|
=*|x sponge .
|
2015-03-27 16:22:48 +00:00
|
|
|
#*|o strings .
|
2015-03-23 15:22:00 +00:00
|
|
|
=*|x sync .
|
2015-03-27 16:22:48 +00:00
|
|
|
=*|o tail .
|
2015-03-23 15:22:00 +00:00
|
|
|
=*|x tar .
|
2015-03-27 16:22:48 +00:00
|
|
|
=*|o tee .
|
|
|
|
=*|o test .
|
2015-08-14 11:58:02 +00:00
|
|
|
=* x tftp .
|
2015-03-27 16:22:48 +00:00
|
|
|
=*|o time .
|
|
|
|
=*|o touch .
|
|
|
|
#*|o tr .
|
|
|
|
=*|o true .
|
|
|
|
=*|o tty .
|
|
|
|
=*|o uname .
|
|
|
|
#*|o unexpand .
|
|
|
|
=*|o uniq .
|
|
|
|
=*|o unlink .
|
|
|
|
=*|o uudecode .
|
|
|
|
=*|o uuencode .
|
|
|
|
#*|o wc .
|
2015-04-27 18:01:30 +00:00
|
|
|
=*|x which .
|
2015-03-27 16:22:48 +00:00
|
|
|
=*|o xargs (-p)
|
2015-03-23 15:22:00 +00:00
|
|
|
=*|x yes .
|
2014-11-20 23:01:56 +00:00
|
|
|
|
2014-02-12 18:39:13 +00:00
|
|
|
The complement of sbase is ubase[1] which is Linux-specific and
|
2014-02-12 14:34:09 +00:00
|
|
|
provides all the non-portable tools. Together they are intended to
|
|
|
|
form a base system similar to busybox but much smaller and suckless.
|
|
|
|
|
|
|
|
Building
|
|
|
|
--------
|
|
|
|
|
|
|
|
To build sbase, simply type make. You may have to fiddle with
|
|
|
|
config.mk depending on your system.
|
|
|
|
|
|
|
|
You can also build sbase-box, which generates a single binary
|
|
|
|
containing all the required tools. You can then symlink the
|
2015-02-28 14:40:16 +00:00
|
|
|
individual tools to sbase-box or run: make sbase-box-install
|
2014-02-12 14:34:09 +00:00
|
|
|
|
|
|
|
Ideally you will want to statically link sbase. If you are on Linux
|
|
|
|
we recommend using musl-libc[2].
|
|
|
|
|
|
|
|
Portability
|
|
|
|
-----------
|
|
|
|
|
|
|
|
sbase has been compiled on a variety of different operating systems,
|
|
|
|
including Linux, *BSD, OSX, Haiku, Solaris, SCO OpenServer and others.
|
|
|
|
|
|
|
|
Various combinations of operating systems and architectures have also
|
|
|
|
been built.
|
|
|
|
|
|
|
|
You can build sbase with gcc, clang, tcc, nwcc and pcc.
|
|
|
|
|
|
|
|
[1] http://git.suckless.org/ubase/
|
|
|
|
[2] http://www.musl-libc.org/
|