0.43
+ * Major update to the provided documentation.
* Busybox now includes a shell! It currently costs 7.5 k (plus an
additional 2.5 k if you compile in command line editing). Handles
job control, has the usual set of builtins, and does everything
#include <sys/types.h>
static const char tty_usage[] = "tty\n\n"
- "Print the file name of the terminal connected to standard input.\n"
-
+ "Print the file name of the terminal connected to standard input.\n\n"
+ "Options:\n"
"\t-s\tprint nothing, only return an exit status\n";
extern int tty_main(int argc, char **argv)
#include <errno.h>
static const char uniq_usage[] =
- "uniq [OPTION]... [INPUT [OUTPUT]]\n"
- "Discard all but one of successive identical lines from INPUT (or\n"
- "standard input), writing to OUTPUT (or standard output).\n"
- "\n"
- "\t-h\tdisplay this help and exit\n"
-
- "\n"
- "A field is a run of whitespace, then non-whitespace characters.\n"
- "Fields are skipped before chars.\n";
+ "uniq [OPTION]... [INPUT [OUTPUT]]\n\n"
+ "Discard all but one of successive identical lines from INPUT\n"
+ "(or standard input), writing to OUTPUT (or standard output).\n";
/* max chars in line */
#define UNIQ_MAX 4096
exit(0);
}
-/* $Id: uniq.c,v 1.8 2000/04/13 01:18:56 erik Exp $ */
+/* $Id: uniq.c,v 1.9 2000/04/17 16:16:10 erik Exp $ */
static const char wc_usage[] = "wc [OPTION]... [FILE]...\n\n"
"Print line, word, and byte counts for each FILE, and a total line if\n"
- "more than one FILE is specified. With no FILE, read standard input.\n"
+ "more than one FILE is specified. With no FILE, read standard input.\n\n"
+ "Options:\n"
"\t-c\tprint the byte counts\n"
"\t-l\tprint the newline counts\n"
#include <pwd.h>
static const char whoami_usage[] = "whoami\n\n"
- "Print the user name associated with the current effective user id.\n"
-
- "Same as id -un.\n";
+ "Prints the user name associated with the current effective user id.\n";
extern int whoami_main(int argc, char **argv)
{
{
int i;
- if (argc == 1)
+ if (argc >=1 && *argv[1]=='-') {
+ usage("yes [OPTION]... [STRING]...\n\n"
+ "Repeatedly outputs a line with all specified STRING(s), or `y'.\n");
+ }
+
+ if (argc == 1) {
while (1)
if (puts("y") == EOF) {
perror("yes");
exit(FALSE);
}
+ }
while (1)
for (i = 1; i < argc; i++)
=item sh
+Usage: sh
+
+lash -- the BusyBox LAme SHell (command interpreter)
+
FIXME
-------------------------------
=item tr
-Usage:
-
- tr [-csu] string1 string2
- tr [-cu] -d string1
- tr [-cu] -s string1
- tr [-cu] -ds string1 string2
+Usage: tr [-csu] string1 string2
+ tr [-cu] -d string1
+ tr [-cu] -s string1
+ tr [-cu] -ds string1 string2
Translate, squeeze, and/or delete characters from standard
input, writing to standard output.
=item tty
-FIXME
+Usage: tty
+
+Print the file name of the terminal connected to standard input.
+
+Options:
+
+ -s print nothing, only return an exit status
+
+Example:
+
+ $ tty
+ /dev/tty2
-------------------------------
=item umount
-FIXME
+Usage: umount [flags] filesystem|directory
+
+Flags:
+
+ -a: Unmount all file systems
+ -r: Try to remount devices as read-only if mount is busy
+ -f: Do not free loop device (if a loop device has been used)
+
+Example:
+
+ $ umount /dev/hdc1
-------------------------------
=item uname
-FIXME
+Usage: uname [OPTION]...
+
+Print certain system information. With no OPTION, same as -s.
+
+Options:
+
+ -a print all information
+ -m the machine (hardware) type
+ -n print the machine's network node hostname
+ -r print the operating system release
+ -s print the operating system name
+ -p print the host processor type
+ -v print the operating system version
+
+Example:
+
+ $ uname -a
+ Linux debian 2.2.15pre13 #5 Tue Mar 14 16:03:50 MST 2000 i686 unknown
-------------------------------
=item uniq
-FIXME
+Usage: uniq [OPTION]... [INPUT [OUTPUT]]
+
+Discard all but one of successive identical lines from INPUT
+(or standard input), writing to OUTPUT (or standard output).
+
+Example:
+
+ $ echo -e "a\na\nb\nc\nc\na" | sort | uniq
+ a
+ b
+ c
-------------------------------
=item update
-FIXME
+Usage: update [options]
+
+Periodically flushes filesystem buffers.
+
+Options:
+
+ -S force use of sync(2) instead of flushing
+ -s SECS call sync this often (default 30)
+ -f SECS flush some buffers this often (default 5)
-------------------------------
=item uptime
-FIXME
+Usage: uptime
+
+Tells how long the system has been running since boot.
+
+Example:
+
+ $ uptime
+ 1:55pm up 2:30, load average: 0.09, 0.04, 0.00
-------------------------------
=item usleep
-FIXME
+Usage: usleep N
+
+Pauses for N microseconds.
+
+Example:
+
+ $ usleep 1000000
+ [pauses for 1 second]
-------------------------------
=item wc
-FIXME
+Usage: wc [OPTION]... [FILE]...
+
+Print line, word, and byte counts for each FILE, and a total line if
+more than one FILE is specified. With no FILE, read standard input.
+
+Options:
+
+ -c print the byte counts
+ -l print the newline counts
+ -L print the length of the longest line
+ -w print the word counts
+
+Example:
+
+ $ wc /etc/passwd
+ 31 46 1365 /etc/passwd
-------------------------------
=item whoami
-FIXME
+Usage: whoami
+
+Prints the user name associated with the current effective user id.
+
+Example:
+
+ $ whoami
+ andersen
-------------------------------
=item yes
-FIXME
+Usage: yes [OPTION]... [STRING]...
+
+Repeatedly outputs a line with all specified STRING(s), or `y'.
-------------------------------
=item zcat
-FIXME
+This is essentially an alias for invoking "gunzip -c", where
+it decompresses the file inquestion and send the output to stdout.
-------------------------------
=cut
-# $Id: busybox.pod,v 1.12 2000/04/17 05:13:59 beppu Exp $
+# $Id: busybox.pod,v 1.13 2000/04/17 16:16:10 erik Exp $
fprintf(stdout, "\n\nBusyBox v%s (%s) Built-in shell\n", BB_VER, BB_BT);
fprintf(stdout, "Enter 'help' for a list of built-in commands.\n\n");
} else {
+ if (*argv[1]=='-') {
+ usage("sh\n\nlash -- the BusyBox LAme SHell (command interpreter)\n");
+ }
input = fopen(argv[1], "r");
if (!input) {
- fatalError("A: Couldn't open file '%s': %s\n", argv[1],
+ fatalError("sh: Couldn't open file '%s': %s\n", argv[1],
strerror(errno));
}
}
#endif /* __GLIBC__ */
static char update_usage[] =
- "update [options]\n"
- " -S\tforce use of sync(2) instead of flushing\n"
- " -s SECS\tcall sync this often (default 30)\n"
- " -f SECS\tflush some buffers this often (default 5)\n";
+ "update [options]\n\n"
+ "Periodically flushes filesystem buffers.\n\n"
+ "Options:\n"
+ "\t-S\tforce use of sync(2) instead of flushing\n"
+ "\t-s SECS\tcall sync this often (default 30)\n"
+ "\t-f SECS\tflush some buffers this often (default 5)\n";
static unsigned int sync_duration = 30;
static unsigned int flush_duration = 5;
{
int pid;
+ argc--;
+ argv++;
while (**argv == '-') {
while (*++(*argv)) {
switch (**argv) {
if (--argc < 1) usage(update_usage);
flush_duration = atoi(*(++argv));
break;
+ default:
+ usage(update_usage);
}
}
argc--;
}
}
}
- return TRUE;
+ exit( TRUE);
}
/*
fprintf(stdout, "\n\nBusyBox v%s (%s) Built-in shell\n", BB_VER, BB_BT);
fprintf(stdout, "Enter 'help' for a list of built-in commands.\n\n");
} else {
+ if (*argv[1]=='-') {
+ usage("sh\n\nlash -- the BusyBox LAme SHell (command interpreter)\n");
+ }
input = fopen(argv[1], "r");
if (!input) {
- fatalError("A: Couldn't open file '%s': %s\n", argv[1],
+ fatalError("sh: Couldn't open file '%s': %s\n", argv[1],
strerror(errno));
}
}
fprintf(stdout, "\n\nBusyBox v%s (%s) Built-in shell\n", BB_VER, BB_BT);
fprintf(stdout, "Enter 'help' for a list of built-in commands.\n\n");
} else {
+ if (*argv[1]=='-') {
+ usage("sh\n\nlash -- the BusyBox LAme SHell (command interpreter)\n");
+ }
input = fopen(argv[1], "r");
if (!input) {
- fatalError("A: Couldn't open file '%s': %s\n", argv[1],
+ fatalError("sh: Couldn't open file '%s': %s\n", argv[1],
strerror(errno));
}
}
#include <sys/types.h>
static const char tty_usage[] = "tty\n\n"
- "Print the file name of the terminal connected to standard input.\n"
-
+ "Print the file name of the terminal connected to standard input.\n\n"
+ "Options:\n"
"\t-s\tprint nothing, only return an exit status\n";
extern int tty_main(int argc, char **argv)
#include <errno.h>
static const char uniq_usage[] =
- "uniq [OPTION]... [INPUT [OUTPUT]]\n"
- "Discard all but one of successive identical lines from INPUT (or\n"
- "standard input), writing to OUTPUT (or standard output).\n"
- "\n"
- "\t-h\tdisplay this help and exit\n"
-
- "\n"
- "A field is a run of whitespace, then non-whitespace characters.\n"
- "Fields are skipped before chars.\n";
+ "uniq [OPTION]... [INPUT [OUTPUT]]\n\n"
+ "Discard all but one of successive identical lines from INPUT\n"
+ "(or standard input), writing to OUTPUT (or standard output).\n";
/* max chars in line */
#define UNIQ_MAX 4096
exit(0);
}
-/* $Id: uniq.c,v 1.8 2000/04/13 01:18:56 erik Exp $ */
+/* $Id: uniq.c,v 1.9 2000/04/17 16:16:10 erik Exp $ */
#endif /* __GLIBC__ */
static char update_usage[] =
- "update [options]\n"
- " -S\tforce use of sync(2) instead of flushing\n"
- " -s SECS\tcall sync this often (default 30)\n"
- " -f SECS\tflush some buffers this often (default 5)\n";
+ "update [options]\n\n"
+ "Periodically flushes filesystem buffers.\n\n"
+ "Options:\n"
+ "\t-S\tforce use of sync(2) instead of flushing\n"
+ "\t-s SECS\tcall sync this often (default 30)\n"
+ "\t-f SECS\tflush some buffers this often (default 5)\n";
static unsigned int sync_duration = 30;
static unsigned int flush_duration = 5;
{
int pid;
+ argc--;
+ argv++;
while (**argv == '-') {
while (*++(*argv)) {
switch (**argv) {
if (--argc < 1) usage(update_usage);
flush_duration = atoi(*(++argv));
break;
+ default:
+ usage(update_usage);
}
}
argc--;
}
}
}
- return TRUE;
+ exit( TRUE);
}
/*
static const char wc_usage[] = "wc [OPTION]... [FILE]...\n\n"
"Print line, word, and byte counts for each FILE, and a total line if\n"
- "more than one FILE is specified. With no FILE, read standard input.\n"
+ "more than one FILE is specified. With no FILE, read standard input.\n\n"
+ "Options:\n"
"\t-c\tprint the byte counts\n"
"\t-l\tprint the newline counts\n"
#include <pwd.h>
static const char whoami_usage[] = "whoami\n\n"
- "Print the user name associated with the current effective user id.\n"
-
- "Same as id -un.\n";
+ "Prints the user name associated with the current effective user id.\n";
extern int whoami_main(int argc, char **argv)
{
{
int i;
- if (argc == 1)
+ if (argc >=1 && *argv[1]=='-') {
+ usage("yes [OPTION]... [STRING]...\n\n"
+ "Repeatedly outputs a line with all specified STRING(s), or `y'.\n");
+ }
+
+ if (argc == 1) {
while (1)
if (puts("y") == EOF) {
perror("yes");
exit(FALSE);
}
+ }
while (1)
for (i = 1; i < argc; i++)