suckless unix tools
Go to file
FRIGN 692c11bf2b Add tablist support and a mandoc-manpage to expand(1)
and mark it as finished in the README.

This is another example showing how broken the GNU coreutils are:

$ echo -e "äää\tüüü\tööö" | gnu-expand -t "5,10,20"
äää    üüü    ööö
$ echo -e "äää\tüüü\tööö" | sbase-expand -t "5,10,20"
äää  üüü  ööö

This is due to the fact that they are still not UTF8-aware and
actually see "ä" as two single characters, expanding the "äää" with
4 spaces to a tab of length 10.
The correct way however is to expand the "äää" with 2 spaces to a
tab of length 5.
One can only imagine how this silently breaks a lot of code around
the world.
WHAT WERE THEY THINKING?
2015-01-25 14:31:02 +01:00
libutf chartorunearr: initialize ret 2015-01-10 17:00:01 +00:00
libutil cp: Rename -d option to -P 2014-12-08 10:02:56 +00:00
LICENSE Various cal(1) improvements 2015-01-02 13:14:41 +00:00
Makefile Rewrite tr(1) in a sane way 2015-01-10 14:26:30 +00:00
README Add tablist support and a mandoc-manpage to expand(1) 2015-01-25 14:31:02 +01:00
TODO Update TODO 2014-12-21 00:01:58 +00:00
arg.h Rename __ARG_H__ to ARG_H__ 2013-11-25 21:29:20 +00:00
basename.1 Refactor basename(1)-manpage 2015-01-23 23:18:42 +01:00
basename.c Fix comparison >= 0 is always true in basename(1) 2014-12-08 12:14:39 +00:00
cal.1 Update date in cal.1 2015-01-18 00:42:26 +00:00
cal.c Fix a small error in cal(1) manpage 2015-01-16 21:48:50 +00:00
cat.1 Add mandoc-manpage for cat(1) 2015-01-16 10:03:18 +00:00
cat.c read stdin if arg is exactly "-" not just begins with '-' 2014-11-18 21:53:37 +00:00
chgrp.1 Tar compiles on BSD, thanks Roberto E. Vargas Caballero. Also remove tons of trailing whitespace. 2013-07-20 01:27:42 -04:00
chgrp.c chgrp: Only check errno if getgrnam() fails 2014-12-21 12:14:26 +00:00
chmod.1 Add mandoc-manpage for chmod(1) 2015-01-17 21:59:37 +00:00
chmod.c Add mandoc-manpage for chmod(1) 2015-01-17 21:59:37 +00:00
chown.1 chown: update usage 2014-07-21 16:43:54 +01:00
chown.c Use < 0 instead of == -1 2014-11-19 20:09:29 +00:00
chroot.1 Tar compiles on BSD, thanks Roberto E. Vargas Caballero. Also remove tons of trailing whitespace. 2013-07-20 01:27:42 -04:00
chroot.c Use < 0 instead of == -1 2014-11-19 20:09:29 +00:00
cksum.1 2014 -> 2015 in cksum.1 2015-01-17 23:09:45 +00:00
cksum.c Add mandoc-manpage for cksum(1) and clean up code 2015-01-17 23:09:41 +00:00
cmp.1 Another update to cmp.1 2014-11-21 13:12:36 +00:00
cmp.c cmp(1) is POSIX compliant so mention it in the manpage 2014-11-21 12:32:07 +00:00
cols.1 Forgot .El in cols.1 2014-12-08 15:15:12 +00:00
cols.c Update cols manpage 2014-12-08 15:14:08 +00:00
comm.1 Add mandoc-manpage for comm(1) and clean up code 2015-01-17 23:10:07 +00:00
comm.c Add mandoc-manpage for comm(1) and clean up code 2015-01-17 23:10:07 +00:00
compat.h Add compat.h 2014-11-17 15:46:28 +00:00
config.mk Import strcasestr() from musl and remove -D_GNU_SOURCE 2014-11-20 23:46:06 +00:00
cp.1 cp: Rename -d option to -P 2014-12-08 10:02:56 +00:00
cp.c cp: Rename -d option to -P 2014-12-08 10:02:56 +00:00
cron.1 Add minimal cron.1 2014-12-16 11:04:18 +00:00
cron.c Rename crond to cron 2014-12-16 11:04:07 +00:00
crypt.h checksum tools: implement -c 2014-03-23 18:02:39 +00:00
cut.1 Refactor cut.1 and cut.c 2015-01-24 22:53:37 +01:00
cut.c Add missing space in error message in cut.c 2015-01-24 23:09:09 +01:00
date.1 Add mandoc-manpage for date(1) and clean up code 2015-01-23 22:54:25 +01:00
date.c Add mandoc-manpage for date(1) and clean up code 2015-01-23 22:54:25 +01:00
dirname.1 Add mandoc-manpage for dirname(1) 2015-01-23 23:17:54 +01:00
dirname.c Fix coding style 2014-11-13 18:08:43 +00:00
du.1 du: add -d flag to specify the max depth to show files or directories 2014-10-18 23:57:00 +01:00
du.c du: fix eprintf parameter 2014-12-22 10:34:29 +00:00
echo.1 Add mandoc-manpage for echo(1) 2015-01-23 23:49:24 +01:00
echo.c Add mandoc-manpage for echo(1) 2015-01-23 23:49:24 +01:00
env.1 Add -u-flag to env.1-manpage 2015-01-24 23:04:40 +01:00
env.c Add mandoc-manpage for env(1) 2015-01-24 00:22:06 +01:00
expand.1 Add tablist support and a mandoc-manpage to expand(1) 2015-01-25 14:31:02 +01:00
expand.c Add tablist support and a mandoc-manpage to expand(1) 2015-01-25 14:31:02 +01:00
expr.1 Add expr.1 2014-09-29 14:22:59 +01:00
expr.c Refactor expr.c 2014-11-17 15:05:49 +00:00
false.1 Add manpages for false(1) and true(1) 2015-01-16 10:03:18 +00:00
false.c Simplify true(1) and false(1) 2014-10-03 00:03:08 +01:00
fold.1 fold: clarify utf8 behaviour in manpage 2012-05-25 21:51:24 +01:00
fold.c remove agetline 2014-11-18 21:05:28 +00:00
fs.h cp: Rename -d option to -P 2014-12-08 10:02:56 +00:00
grep.1 Clarify mechanics in grep.1 2015-01-22 17:50:07 +00:00
grep.c Use \< and \> instead of [[:<:]] and [[:>:]] 2015-01-22 17:37:52 +00:00
head.1
head.c Print header in head(1) 2014-11-20 22:52:05 +00:00
hostname.1 Add hostname(1) 2013-10-05 14:58:55 +01:00
hostname.c Fix coding style 2014-11-13 18:08:43 +00:00
kill.1 Fix .SH to .Sh in kill.1 2014-11-23 13:22:55 +00:00
kill.c Un-boolify sbase 2014-11-14 10:54:20 +00:00
link.1 Add link(1) 2014-10-17 15:36:16 +01:00
link.c Fix coding style 2014-11-13 18:08:43 +00:00
ln.1 ln: Add support for target directories 2014-11-23 20:58:15 +00:00
ln.c Handle ln -sf a foo/ correctly 2015-01-22 16:26:30 +00:00
logger.1 Implement POSIX 2008 compliant logger(1) 2014-12-04 11:36:40 +00:00
logger.c logger: Don't bother freeing buf 2014-12-16 20:14:40 +00:00
logname.1 Add logname(1) 2014-10-17 15:36:27 +01:00
logname.c Fix coding style 2014-11-13 18:08:43 +00:00
ls.1 ls: Implement -c and update manpage 2015-01-20 16:50:37 +00:00
ls.c ls: Implement -c and update manpage 2015-01-20 16:50:37 +00:00
md5.h Add crypt.[ch] and update md5sum and sha1sum 2013-07-18 09:51:17 -04:00
md5sum.1 update some man pages 2014-04-12 20:33:33 +01:00
md5sum.c Staticise globals 2014-11-17 13:39:11 +00:00
mkdir.1 Implement -m option for mkdir 2013-10-05 13:51:45 +01:00
mkdir.c Use < 0 instead of == -1 2014-11-19 20:09:29 +00:00
mkfifo.1 Implement -m for mkfifo(1) 2013-11-30 20:58:15 +00:00
mkfifo.c Don't stop at first failure in mkfifo(1) 2014-11-22 11:18:21 +00:00
mktemp.1 Forgot to update manpage for mktemp(1) 2013-11-14 19:50:07 +00:00
mktemp.c Fix coding style 2014-11-13 18:08:43 +00:00
mv.1 Support -f for mv 2013-10-05 13:51:45 +01:00
mv.c Un-boolify sbase 2014-11-14 10:54:20 +00:00
nice.1 Tar compiles on BSD, thanks Roberto E. Vargas Caballero. Also remove tons of trailing whitespace. 2013-07-20 01:27:42 -04:00
nice.c Use PRIO_{MIN,MAX} instead of NZERO 2014-11-17 15:02:51 +00:00
nl.1 Update nl(1) manpage 2014-12-04 13:50:15 +00:00
nl.c Update nl(1) manpage 2014-12-04 13:50:15 +00:00
nohup.1 nohup: tweak manpage 2011-06-18 14:42:06 +01:00
nohup.c Use < 0 instead of == -1 2014-11-19 20:09:29 +00:00
paste.1 Tar compiles on BSD, thanks Roberto E. Vargas Caballero. Also remove tons of trailing whitespace. 2013-07-20 01:27:42 -04:00
paste.c Convert codebase to use emalloc.c utility-functions 2014-11-16 10:22:39 +00:00
printenv.1 Tar compiles on BSD, thanks Roberto E. Vargas Caballero. Also remove tons of trailing whitespace. 2013-07-20 01:27:42 -04:00
printenv.c Style fix 2014-11-16 13:17:06 +00:00
printf.1 Add printf.1 2014-09-29 14:35:35 +01:00
printf.c Import printf(1) from OpenBSD 2014-09-28 15:12:15 +01:00
pwd.1 Update pwd.1 2014-11-23 12:56:19 +00:00
pwd.c Use < 0 instead of == -1 2014-11-19 20:09:29 +00:00
queue.h Use queue.h in grep(1) 2014-11-16 12:39:15 +00:00
readlink.1 Add readlink 2013-06-16 07:46:01 +02:00
readlink.c State the reason for failure in readlink(1) 2014-12-04 12:14:59 +00:00
renice.1 renice(1): renice is not PASTE 2014-05-06 16:21:56 +01:00
renice.c Use < 0 instead of == -1 2014-11-19 20:09:29 +00:00
rm.1 Add -R as a synonym to -r for rm(1) 2013-12-12 13:15:47 +00:00
rm.c Un-boolify sbase 2014-11-14 10:54:20 +00:00
rmdir.1 Tar compiles on BSD, thanks Roberto E. Vargas Caballero. Also remove tons of trailing whitespace. 2013-07-20 01:27:42 -04:00
rmdir.c Use < 0 instead of == -1 2014-11-19 20:09:29 +00:00
runetypebody.h Import libutf from http://git.suckless.org/libutf 2014-11-17 15:46:01 +00:00
seq.1 Tar compiles on BSD, thanks Roberto E. Vargas Caballero. Also remove tons of trailing whitespace. 2013-07-20 01:27:42 -04:00
seq.c Un-boolify sbase 2014-11-14 10:54:20 +00:00
setsid.1 Add setsid(1) by arg 2013-10-05 14:58:55 +01:00
setsid.c Sort includes and more cleanup and fixes in util/ 2014-11-14 10:54:10 +00:00
sha1.h Add crypt.[ch] and update md5sum and sha1sum 2013-07-18 09:51:17 -04:00
sha1sum.1 update some man pages 2014-04-12 20:33:33 +01:00
sha1sum.c Staticise globals 2014-11-17 13:39:11 +00:00
sha256.h Add sha256sum(1) 2013-07-20 13:20:16 -04:00
sha256sum.1 update some man pages 2014-04-12 20:33:33 +01:00
sha256sum.c Staticise globals 2014-11-17 13:39:11 +00:00
sha512.h Add sha512sum(1) 2013-08-04 11:00:34 -04:00
sha512sum.1 update some man pages 2014-04-12 20:33:33 +01:00
sha512sum.c Staticise globals 2014-11-17 13:39:11 +00:00
sleep.1
sleep.c Fix coding style 2014-11-13 18:08:43 +00:00
sort.1 sort: Implement -c and -C flags 2014-11-23 19:42:14 +00:00
sort.c Nuke another freelist() 2014-12-16 21:02:03 +00:00
split.1 Tar compiles on BSD, thanks Roberto E. Vargas Caballero. Also remove tons of trailing whitespace. 2013-07-20 01:27:42 -04:00
split.c Use < 0 instead of == -1 2014-11-19 20:09:29 +00:00
sponge.1 actually add the .c and .1 files 2013-07-02 13:26:24 -04:00
sponge.c Fix error message 2014-11-16 13:20:36 +00:00
strings.1 Add note about standards for strings.1 2014-11-23 12:46:24 +00:00
strings.c Respect exit status in strings(1) and update manpage 2014-11-23 12:44:38 +00:00
sync.1 Tar compiles on BSD, thanks Roberto E. Vargas Caballero. Also remove tons of trailing whitespace. 2013-07-20 01:27:42 -04:00
sync.c Fix coding style 2014-11-13 18:08:43 +00:00
tail.1 fix typo 2011-05-27 00:54:10 +01:00
tail.c Print header in tail(1) 2014-11-20 23:09:42 +00:00
tar.1 Tar compiles on BSD, thanks Roberto E. Vargas Caballero. Also remove tons of trailing whitespace. 2013-07-20 01:27:42 -04:00
tar.c Un-boolify sbase 2014-11-14 10:54:20 +00:00
tee.1 Add mandoc-manpage for tee(1) 2015-01-23 22:02:45 +01:00
tee.c tee: -i option ignores SIGINT 2015-01-22 21:35:36 +00:00
test.1 Update manpage for binary operations in test(1) 2013-11-11 12:01:47 +00:00
test.c Un-boolify sbase 2014-11-14 10:54:20 +00:00
text.h remove agetline 2014-11-18 21:05:28 +00:00
touch.1 touch: Remember to terminate .Bl with .El 2015-01-20 11:19:32 +00:00
touch.c touch: Style fix 2015-01-20 11:24:37 +00:00
tr.1 Add octal sequence support to tr(1) 2015-01-24 22:43:46 +01:00
tr.c Fix segmentation fault in tr(1) 2015-01-24 23:00:34 +01:00
true.1 Add manpages for false(1) and true(1) 2015-01-16 10:03:18 +00:00
true.c Simplify true(1) and false(1) 2014-10-03 00:03:08 +01:00
tty.1 add tty 2011-06-02 21:15:35 +01:00
tty.c Sort includes and more cleanup and fixes in util/ 2014-11-14 10:54:10 +00:00
uname.1 fix manpages 2011-06-02 20:38:48 +01:00
uname.c Un-boolify sbase 2014-11-14 10:54:20 +00:00
unexpand.1 Add unexpand(1) 2014-06-09 17:00:13 +01:00
unexpand.c unexpand: fix eprintf 2014-12-22 10:34:29 +00:00
uniq.1 uniq: WTFM 2012-05-21 23:46:22 +00:00
uniq.c remove agetline 2014-11-18 21:05:28 +00:00
unlink.1 Tar compiles on BSD, thanks Roberto E. Vargas Caballero. Also remove tons of trailing whitespace. 2013-07-20 01:27:42 -04:00
unlink.c Use < 0 instead of == -1 2014-11-19 20:09:29 +00:00
utf.h Rewrite tr(1) in a sane way 2015-01-10 14:26:30 +00:00
util.h Import strcasestr() from musl and remove -D_GNU_SOURCE 2014-11-20 23:46:06 +00:00
uudecode.1 Initial commit of the uudecode tool and man page 2014-02-02 20:50:31 +00:00
uudecode.c remove agetline 2014-11-18 21:05:28 +00:00
uuencode.1 Add uuencode(1) 2014-01-31 15:29:11 +00:00
uuencode.c Fix coding style 2014-11-13 18:08:43 +00:00
wc.1
wc.c Un-boolify sbase 2014-11-14 10:54:20 +00:00
xargs.1 update some man pages 2014-04-12 20:33:33 +01:00
xargs.c Use < 0 instead of == -1 2014-11-19 20:09:29 +00:00
yes.1 Tar compiles on BSD, thanks Roberto E. Vargas Caballero. Also remove tons of trailing whitespace. 2013-07-20 01:27:42 -04:00
yes.c Fix coding style 2014-11-13 18:08:43 +00:00

README

sbase - suckless unix tools
===========================

sbase  is a  collection of  unix  tools that  are inherently  portable
across UNIX and UNIX-like systems.

The following tools are implemented ('*' == finished, '#' == UTF-8 support,
'=' == implicit UTF-8 support):

   UTILITY         POSIX 2008 COMPLIANT            MISSING OPTIONS
   -------         --------------------            ---------------
=* basename        yes                             none
=* cal             yes                             none
=* cat             yes                             none
=  chgrp           no                              -h, -H, -L, -P
=* chmod           yes                             none
=  chown           no                              -h, -H, -L, -P
=  chroot          non-posix                       none
=* cksum           yes                             none
   cmp             yes                             none
   cols            non-posix                       none
=* comm            yes                             none
=  cp              no                              -H, (-i), -L
=* cron            non-posix                       none
#* cut             yes                             none
=* date            yes                             none
=* dirname         yes                             none
=  du              no                              -H, -L, (-x)
=* echo            yes                             none
=* env             yes                             none
#* expand          yes                             none
   expr            yes                             none
=* false           yes                             none
   fold            yes                             none
   grep            yes                             none
   head            yes                             none
=  hostname        non-posix                       none
=* kill            yes                             none
=  link            yes                             none
=  ln              yes                             none
=* logger          yes                             none
=  logname         yes                             none
=  ls              no                              -C, -R, -q, -u
   md5sum          non-posix                       none
=  mkdir           yes                             none
=  mkfifo          yes                             none
=  mktemp          non-posix                       none
=  mv              yes                             (-i)
=  nice            yes                             none
=  nl              no                              -d, -f, -h, -l, -n, -p, -v, -w
=  nohup           yes                             none
   paste           yes                             none
=  printenv        non-posix                       none
   printf          stolen                          stolen
=* pwd             yes                             none
=  readlink        non-posix                       none
=  renice          yes                             none
=  rm              yes                             (-i)
=  rmdir           no                              -p
=  sleep           yes                             none
=  setsid          non-posix                       none
   sort            no                              -m, -o, -d, -f, -i
   split           yes                             none
=  sponge          non-posix                       none
   strings         no                              -a, -n, -t
=  sync            non-posix                       none
=  tail            no                              -c, -f
=  tar             non-posix                       none
=* tee             yes                             none
   test            yes                             none
=  touch           no                              -r
#* tr              yes                             none
=* true            yes                             none
=  tty             yes                             none
=  uudecode        no                              -o
=  uuencode        no                              -m
=  uname           yes                             none
#  unexpand        yes                             none
=  uniq            no                              -f, -s
=  unlink          yes                             none
   seq             non-posix                       none
=  sha1sum         non-posix                       none
=  sha256sum       non-posix                       none
=  sha512sum       non-posix                       none
   wc              yes                             none
=  xargs           no                              -I, -L, -p, -s, -t, -x
=  yes             yes                             none

The  complement of  sbase  is  ubase[1] which  is  Linux-specific  and
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
individual tools to sbase-box.

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/