More updates to the docs, and fixes to sync things with the docs.
-Erik
This commit is contained in:
parent
4fd10fc73b
commit
e5b6c7dd9c
@ -1,4 +1,5 @@
|
|||||||
0.43
|
0.43
|
||||||
|
* Major update to the provided documentation.
|
||||||
* Busybox now includes a shell! It currently costs 7.5 k (plus an
|
* 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
|
additional 2.5 k if you compile in command line editing). Handles
|
||||||
job control, has the usual set of builtins, and does everything
|
job control, has the usual set of builtins, and does everything
|
||||||
|
@ -25,8 +25,8 @@
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
static const char tty_usage[] = "tty\n\n"
|
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";
|
"\t-s\tprint nothing, only return an exit status\n";
|
||||||
|
|
||||||
extern int tty_main(int argc, char **argv)
|
extern int tty_main(int argc, char **argv)
|
||||||
|
@ -28,15 +28,9 @@
|
|||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
static const char uniq_usage[] =
|
static const char uniq_usage[] =
|
||||||
"uniq [OPTION]... [INPUT [OUTPUT]]\n"
|
"uniq [OPTION]... [INPUT [OUTPUT]]\n\n"
|
||||||
"Discard all but one of successive identical lines from INPUT (or\n"
|
"Discard all but one of successive identical lines from INPUT\n"
|
||||||
"standard input), writing to OUTPUT (or standard output).\n"
|
"(or 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";
|
|
||||||
|
|
||||||
/* max chars in line */
|
/* max chars in line */
|
||||||
#define UNIQ_MAX 4096
|
#define UNIQ_MAX 4096
|
||||||
@ -190,4 +184,4 @@ int uniq_main(int argc, char **argv)
|
|||||||
exit(0);
|
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 $ */
|
||||||
|
@ -25,7 +25,8 @@
|
|||||||
|
|
||||||
static const char wc_usage[] = "wc [OPTION]... [FILE]...\n\n"
|
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"
|
"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-c\tprint the byte counts\n"
|
||||||
"\t-l\tprint the newline counts\n"
|
"\t-l\tprint the newline counts\n"
|
||||||
|
|
||||||
|
@ -25,9 +25,7 @@
|
|||||||
#include <pwd.h>
|
#include <pwd.h>
|
||||||
|
|
||||||
static const char whoami_usage[] = "whoami\n\n"
|
static const char whoami_usage[] = "whoami\n\n"
|
||||||
"Print the user name associated with the current effective user id.\n"
|
"Prints the user name associated with the current effective user id.\n";
|
||||||
|
|
||||||
"Same as id -un.\n";
|
|
||||||
|
|
||||||
extern int whoami_main(int argc, char **argv)
|
extern int whoami_main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
@ -27,12 +27,18 @@ extern int yes_main(int argc, char **argv)
|
|||||||
{
|
{
|
||||||
int i;
|
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)
|
while (1)
|
||||||
if (puts("y") == EOF) {
|
if (puts("y") == EOF) {
|
||||||
perror("yes");
|
perror("yes");
|
||||||
exit(FALSE);
|
exit(FALSE);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
for (i = 1; i < argc; i++)
|
for (i = 1; i < argc; i++)
|
||||||
|
133
docs/busybox.pod
133
docs/busybox.pod
@ -1290,6 +1290,10 @@ Example:
|
|||||||
|
|
||||||
=item sh
|
=item sh
|
||||||
|
|
||||||
|
Usage: sh
|
||||||
|
|
||||||
|
lash -- the BusyBox LAme SHell (command interpreter)
|
||||||
|
|
||||||
FIXME
|
FIXME
|
||||||
|
|
||||||
-------------------------------
|
-------------------------------
|
||||||
@ -1528,12 +1532,10 @@ Example:
|
|||||||
|
|
||||||
=item tr
|
=item tr
|
||||||
|
|
||||||
Usage:
|
Usage: tr [-csu] string1 string2
|
||||||
|
tr [-cu] -d string1
|
||||||
tr [-csu] string1 string2
|
tr [-cu] -s string1
|
||||||
tr [-cu] -d string1
|
tr [-cu] -ds string1 string2
|
||||||
tr [-cu] -s string1
|
|
||||||
tr [-cu] -ds string1 string2
|
|
||||||
|
|
||||||
Translate, squeeze, and/or delete characters from standard
|
Translate, squeeze, and/or delete characters from standard
|
||||||
input, writing to standard output.
|
input, writing to standard output.
|
||||||
@ -1559,67 +1561,162 @@ Example:
|
|||||||
|
|
||||||
=item tty
|
=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
|
=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
|
=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
|
=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
|
=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
|
=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
|
=item usleep
|
||||||
|
|
||||||
FIXME
|
Usage: usleep N
|
||||||
|
|
||||||
|
Pauses for N microseconds.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
$ usleep 1000000
|
||||||
|
[pauses for 1 second]
|
||||||
|
|
||||||
-------------------------------
|
-------------------------------
|
||||||
|
|
||||||
=item wc
|
=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
|
=item whoami
|
||||||
|
|
||||||
FIXME
|
Usage: whoami
|
||||||
|
|
||||||
|
Prints the user name associated with the current effective user id.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
$ whoami
|
||||||
|
andersen
|
||||||
|
|
||||||
-------------------------------
|
-------------------------------
|
||||||
|
|
||||||
=item yes
|
=item yes
|
||||||
|
|
||||||
FIXME
|
Usage: yes [OPTION]... [STRING]...
|
||||||
|
|
||||||
|
Repeatedly outputs a line with all specified STRING(s), or `y'.
|
||||||
|
|
||||||
-------------------------------
|
-------------------------------
|
||||||
|
|
||||||
=item zcat
|
=item zcat
|
||||||
|
|
||||||
FIXME
|
This is essentially an alias for invoking "gunzip -c", where
|
||||||
|
it decompresses the file inquestion and send the output to stdout.
|
||||||
|
|
||||||
-------------------------------
|
-------------------------------
|
||||||
|
|
||||||
@ -1684,4 +1781,4 @@ Enrique Zanardi <ezanardi@ull.es>
|
|||||||
|
|
||||||
=cut
|
=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 $
|
||||||
|
5
lash.c
5
lash.c
@ -961,9 +961,12 @@ int shell_main(int argc, char **argv)
|
|||||||
fprintf(stdout, "\n\nBusyBox v%s (%s) Built-in shell\n", BB_VER, BB_BT);
|
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");
|
fprintf(stdout, "Enter 'help' for a list of built-in commands.\n\n");
|
||||||
} else {
|
} else {
|
||||||
|
if (*argv[1]=='-') {
|
||||||
|
usage("sh\n\nlash -- the BusyBox LAme SHell (command interpreter)\n");
|
||||||
|
}
|
||||||
input = fopen(argv[1], "r");
|
input = fopen(argv[1], "r");
|
||||||
if (!input) {
|
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));
|
strerror(errno));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -35,10 +35,12 @@ _syscall2(int, bdflush, int, func, int, data);
|
|||||||
#endif /* __GLIBC__ */
|
#endif /* __GLIBC__ */
|
||||||
|
|
||||||
static char update_usage[] =
|
static char update_usage[] =
|
||||||
"update [options]\n"
|
"update [options]\n\n"
|
||||||
" -S\tforce use of sync(2) instead of flushing\n"
|
"Periodically flushes filesystem buffers.\n\n"
|
||||||
" -s SECS\tcall sync this often (default 30)\n"
|
"Options:\n"
|
||||||
" -f SECS\tflush some buffers this often (default 5)\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 sync_duration = 30;
|
||||||
static unsigned int flush_duration = 5;
|
static unsigned int flush_duration = 5;
|
||||||
@ -48,6 +50,8 @@ extern int update_main(int argc, char **argv)
|
|||||||
{
|
{
|
||||||
int pid;
|
int pid;
|
||||||
|
|
||||||
|
argc--;
|
||||||
|
argv++;
|
||||||
while (**argv == '-') {
|
while (**argv == '-') {
|
||||||
while (*++(*argv)) {
|
while (*++(*argv)) {
|
||||||
switch (**argv) {
|
switch (**argv) {
|
||||||
@ -62,6 +66,8 @@ extern int update_main(int argc, char **argv)
|
|||||||
if (--argc < 1) usage(update_usage);
|
if (--argc < 1) usage(update_usage);
|
||||||
flush_duration = atoi(*(++argv));
|
flush_duration = atoi(*(++argv));
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
usage(update_usage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
argc--;
|
argc--;
|
||||||
@ -100,7 +106,7 @@ extern int update_main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return TRUE;
|
exit( TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
5
sh.c
5
sh.c
@ -961,9 +961,12 @@ int shell_main(int argc, char **argv)
|
|||||||
fprintf(stdout, "\n\nBusyBox v%s (%s) Built-in shell\n", BB_VER, BB_BT);
|
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");
|
fprintf(stdout, "Enter 'help' for a list of built-in commands.\n\n");
|
||||||
} else {
|
} else {
|
||||||
|
if (*argv[1]=='-') {
|
||||||
|
usage("sh\n\nlash -- the BusyBox LAme SHell (command interpreter)\n");
|
||||||
|
}
|
||||||
input = fopen(argv[1], "r");
|
input = fopen(argv[1], "r");
|
||||||
if (!input) {
|
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));
|
strerror(errno));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -961,9 +961,12 @@ int shell_main(int argc, char **argv)
|
|||||||
fprintf(stdout, "\n\nBusyBox v%s (%s) Built-in shell\n", BB_VER, BB_BT);
|
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");
|
fprintf(stdout, "Enter 'help' for a list of built-in commands.\n\n");
|
||||||
} else {
|
} else {
|
||||||
|
if (*argv[1]=='-') {
|
||||||
|
usage("sh\n\nlash -- the BusyBox LAme SHell (command interpreter)\n");
|
||||||
|
}
|
||||||
input = fopen(argv[1], "r");
|
input = fopen(argv[1], "r");
|
||||||
if (!input) {
|
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));
|
strerror(errno));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
4
tty.c
4
tty.c
@ -25,8 +25,8 @@
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
static const char tty_usage[] = "tty\n\n"
|
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";
|
"\t-s\tprint nothing, only return an exit status\n";
|
||||||
|
|
||||||
extern int tty_main(int argc, char **argv)
|
extern int tty_main(int argc, char **argv)
|
||||||
|
14
uniq.c
14
uniq.c
@ -28,15 +28,9 @@
|
|||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
static const char uniq_usage[] =
|
static const char uniq_usage[] =
|
||||||
"uniq [OPTION]... [INPUT [OUTPUT]]\n"
|
"uniq [OPTION]... [INPUT [OUTPUT]]\n\n"
|
||||||
"Discard all but one of successive identical lines from INPUT (or\n"
|
"Discard all but one of successive identical lines from INPUT\n"
|
||||||
"standard input), writing to OUTPUT (or standard output).\n"
|
"(or 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";
|
|
||||||
|
|
||||||
/* max chars in line */
|
/* max chars in line */
|
||||||
#define UNIQ_MAX 4096
|
#define UNIQ_MAX 4096
|
||||||
@ -190,4 +184,4 @@ int uniq_main(int argc, char **argv)
|
|||||||
exit(0);
|
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 $ */
|
||||||
|
16
update.c
16
update.c
@ -35,10 +35,12 @@ _syscall2(int, bdflush, int, func, int, data);
|
|||||||
#endif /* __GLIBC__ */
|
#endif /* __GLIBC__ */
|
||||||
|
|
||||||
static char update_usage[] =
|
static char update_usage[] =
|
||||||
"update [options]\n"
|
"update [options]\n\n"
|
||||||
" -S\tforce use of sync(2) instead of flushing\n"
|
"Periodically flushes filesystem buffers.\n\n"
|
||||||
" -s SECS\tcall sync this often (default 30)\n"
|
"Options:\n"
|
||||||
" -f SECS\tflush some buffers this often (default 5)\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 sync_duration = 30;
|
||||||
static unsigned int flush_duration = 5;
|
static unsigned int flush_duration = 5;
|
||||||
@ -48,6 +50,8 @@ extern int update_main(int argc, char **argv)
|
|||||||
{
|
{
|
||||||
int pid;
|
int pid;
|
||||||
|
|
||||||
|
argc--;
|
||||||
|
argv++;
|
||||||
while (**argv == '-') {
|
while (**argv == '-') {
|
||||||
while (*++(*argv)) {
|
while (*++(*argv)) {
|
||||||
switch (**argv) {
|
switch (**argv) {
|
||||||
@ -62,6 +66,8 @@ extern int update_main(int argc, char **argv)
|
|||||||
if (--argc < 1) usage(update_usage);
|
if (--argc < 1) usage(update_usage);
|
||||||
flush_duration = atoi(*(++argv));
|
flush_duration = atoi(*(++argv));
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
usage(update_usage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
argc--;
|
argc--;
|
||||||
@ -100,7 +106,7 @@ extern int update_main(int argc, char **argv)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return TRUE;
|
exit( TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
3
wc.c
3
wc.c
@ -25,7 +25,8 @@
|
|||||||
|
|
||||||
static const char wc_usage[] = "wc [OPTION]... [FILE]...\n\n"
|
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"
|
"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-c\tprint the byte counts\n"
|
||||||
"\t-l\tprint the newline counts\n"
|
"\t-l\tprint the newline counts\n"
|
||||||
|
|
||||||
|
4
whoami.c
4
whoami.c
@ -25,9 +25,7 @@
|
|||||||
#include <pwd.h>
|
#include <pwd.h>
|
||||||
|
|
||||||
static const char whoami_usage[] = "whoami\n\n"
|
static const char whoami_usage[] = "whoami\n\n"
|
||||||
"Print the user name associated with the current effective user id.\n"
|
"Prints the user name associated with the current effective user id.\n";
|
||||||
|
|
||||||
"Same as id -un.\n";
|
|
||||||
|
|
||||||
extern int whoami_main(int argc, char **argv)
|
extern int whoami_main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
8
yes.c
8
yes.c
@ -27,12 +27,18 @@ extern int yes_main(int argc, char **argv)
|
|||||||
{
|
{
|
||||||
int i;
|
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)
|
while (1)
|
||||||
if (puts("y") == EOF) {
|
if (puts("y") == EOF) {
|
||||||
perror("yes");
|
perror("yes");
|
||||||
exit(FALSE);
|
exit(FALSE);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
for (i = 1; i < argc; i++)
|
for (i = 1; i < argc; i++)
|
||||||
|
Loading…
Reference in New Issue
Block a user