| 
									
										
										
										
											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 16:22:00 +01:00
										 |  |  | The following tools are implemented: | 
					
						
							| 
									
										
										
										
											2014-11-20 23:01:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-23 16:22:00 +01:00
										 |  |  | '#'  -> UTF-8 support, '=' -> Implicit UTF-8 support, '*' -> Finished, | 
					
						
							|  |  |  | '|'  -> Audited,       'o' -> POSIX 2013 compliant,   'x' -> Non-POSIX, | 
					
						
							|  |  |  | '()' -> Petty flag | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-04 12:59:04 +02:00
										 |  |  |      UTILITY     MISSING | 
					
						
							|  |  |  |      -------     ------- | 
					
						
							| 
									
										
										
										
											2015-03-27 17:22:48 +01:00
										 |  |  | =*|o basename    . | 
					
						
							|  |  |  | =*|o cal         . | 
					
						
							|  |  |  | =*|o cat         . | 
					
						
							|  |  |  | =*|o chgrp       . | 
					
						
							|  |  |  | =*|o chmod       . | 
					
						
							|  |  |  | =*|o chown       . | 
					
						
							| 
									
										
										
										
											2015-03-23 16:22:00 +01:00
										 |  |  | =*|x chroot      . | 
					
						
							| 
									
										
										
										
											2015-03-27 17:22:48 +01:00
										 |  |  | =*|o cksum       . | 
					
						
							|  |  |  | =*|o cmp         . | 
					
						
							| 
									
										
										
										
											2015-03-23 16:22:00 +01:00
										 |  |  | #*|x cols        . | 
					
						
							| 
									
										
										
										
											2015-03-27 17:22:48 +01:00
										 |  |  | =*|o comm        . | 
					
						
							|  |  |  | =*|o cp          (-i) | 
					
						
							| 
									
										
										
										
											2015-03-23 16:22:00 +01:00
										 |  |  | =*|x cron        . | 
					
						
							| 
									
										
										
										
											2015-03-27 17:22:48 +01:00
										 |  |  | #*|o cut         . | 
					
						
							|  |  |  | =*|o date        . | 
					
						
							|  |  |  | =*|o dirname     . | 
					
						
							|  |  |  | =*|o du          . | 
					
						
							|  |  |  | =*|o echo        . | 
					
						
							|  |  |  | =*|o env         . | 
					
						
							|  |  |  | #*|o expand      . | 
					
						
							|  |  |  | #*|o expr        . | 
					
						
							|  |  |  | =*|o false       . | 
					
						
							| 
									
										
										
										
											2015-08-04 20:42:55 +02:00
										 |  |  | =    find        . | 
					
						
							| 
									
										
										
										
											2015-10-07 10:24:46 +01:00
										 |  |  | =* x flock       . | 
					
						
							| 
									
										
										
										
											2015-03-27 17:22:48 +01:00
										 |  |  | #*|o fold        . | 
					
						
							| 
									
										
										
										
											2015-10-26 00:45:20 +01:00
										 |  |  | =*|o getconf     (-v) | 
					
						
							| 
									
										
										
										
											2015-11-06 10:30:20 +00:00
										 |  |  | =*|o grep        . | 
					
						
							| 
									
										
										
										
											2015-03-27 17:22:48 +01:00
										 |  |  | =*|o head        . | 
					
						
							| 
									
										
										
										
											2015-03-23 16:22:00 +01:00
										 |  |  | =*|x hostname    . | 
					
						
							| 
									
										
										
										
											2015-04-20 11:23:20 +01:00
										 |  |  | =* o join        . | 
					
						
							| 
									
										
										
										
											2015-03-27 17:22:48 +01:00
										 |  |  | =*|o kill        . | 
					
						
							|  |  |  | =*|o link        . | 
					
						
							|  |  |  | =*|o ln          . | 
					
						
							|  |  |  | =*|o logger      . | 
					
						
							|  |  |  | =*|o logname     . | 
					
						
							|  |  |  | #* o ls          (-C, -k, -m, -p, -s, -x) | 
					
						
							| 
									
										
										
										
											2015-03-23 16:22:00 +01:00
										 |  |  | =*|x md5sum      . | 
					
						
							| 
									
										
										
										
											2015-03-27 17:22:48 +01:00
										 |  |  | =*|o mkdir       . | 
					
						
							|  |  |  | =*|o mkfifo      . | 
					
						
							| 
									
										
										
										
											2015-03-23 16:22:00 +01:00
										 |  |  | =*|x mktemp      . | 
					
						
							| 
									
										
										
										
											2015-03-27 17:22:48 +01:00
										 |  |  | =*|o mv          (-i) | 
					
						
							|  |  |  | =*|o nice        . | 
					
						
							|  |  |  | #*|o nl          . | 
					
						
							|  |  |  | =*|o nohup       . | 
					
						
							| 
									
										
										
										
											2015-10-26 00:42:20 +01:00
										 |  |  | =*|o od          . | 
					
						
							| 
									
										
										
										
											2015-03-27 17:22:48 +01:00
										 |  |  | #*|o paste       . | 
					
						
							| 
									
										
										
										
											2015-03-23 16:22:00 +01:00
										 |  |  | =*|x printenv    . | 
					
						
							| 
									
										
										
										
											2015-03-27 17:22:48 +01:00
										 |  |  | #*|o printf      . | 
					
						
							|  |  |  | =*|o pwd         . | 
					
						
							| 
									
										
										
										
											2015-03-23 16:22:00 +01:00
										 |  |  | =*|x readlink    . | 
					
						
							| 
									
										
										
										
											2015-03-27 17:22:48 +01:00
										 |  |  | =*|o renice      . | 
					
						
							|  |  |  | =*|o rm          (-i) | 
					
						
							|  |  |  | =*|o rmdir       . | 
					
						
							| 
									
										
										
										
											2015-08-04 20:42:55 +02:00
										 |  |  | #    sed         . | 
					
						
							| 
									
										
										
										
											2015-03-23 16:22:00 +01:00
										 |  |  | =*|x seq         . | 
					
						
							|  |  |  | =*|x setsid      . | 
					
						
							|  |  |  | =*|x sha1sum     . | 
					
						
							|  |  |  | =*|x sha256sum   . | 
					
						
							|  |  |  | =*|x sha512sum   . | 
					
						
							| 
									
										
										
										
											2015-03-27 17:22:48 +01: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 12:45:59 +02:00
										 |  |  | #*|o sort        (-d, -f, -i) | 
					
						
							| 
									
										
										
										
											2015-03-27 17:22:48 +01:00
										 |  |  | =*|o split       . | 
					
						
							| 
									
										
										
										
											2015-03-23 16:22:00 +01:00
										 |  |  | =*|x sponge      . | 
					
						
							| 
									
										
										
										
											2015-03-27 17:22:48 +01:00
										 |  |  | #*|o strings     . | 
					
						
							| 
									
										
										
										
											2015-03-23 16:22:00 +01:00
										 |  |  | =*|x sync        . | 
					
						
							| 
									
										
										
										
											2015-03-27 17:22:48 +01:00
										 |  |  | =*|o tail        . | 
					
						
							| 
									
										
										
										
											2015-03-23 16:22:00 +01:00
										 |  |  | =*|x tar         . | 
					
						
							| 
									
										
										
										
											2015-03-27 17:22:48 +01:00
										 |  |  | =*|o tee         . | 
					
						
							|  |  |  | =*|o test        . | 
					
						
							| 
									
										
										
										
											2015-11-06 10:30:20 +00:00
										 |  |  | =*|x tftp        . | 
					
						
							| 
									
										
										
										
											2015-03-27 17:22:48 +01: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 20:01:30 +02:00
										 |  |  | =*|x which       . | 
					
						
							| 
									
										
										
										
											2015-03-27 17:22:48 +01:00
										 |  |  | =*|o xargs       (-p) | 
					
						
							| 
									
										
										
										
											2015-03-23 16:22:00 +01: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 15:40:16 +01: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/ |