* fix emacs [ tabcompletion bug
XXX it's probably a bug in vi mode too, it just doesn't show * bring manual page and reality into closer sync'd state * sort ulimits
This commit is contained in:
17
edit.c
17
edit.c
@@ -1,4 +1,4 @@
|
|||||||
/** $MirOS: src/bin/mksh/edit.c,v 1.3 2005/05/23 16:23:18 tg Exp $ */
|
/** $MirOS: src/bin/mksh/edit.c,v 1.4 2005/05/25 23:31:05 tg Exp $ */
|
||||||
/* $OpenBSD: edit.c,v 1.29 2005/04/13 02:33:08 deraadt Exp $ */
|
/* $OpenBSD: edit.c,v 1.29 2005/04/13 02:33:08 deraadt Exp $ */
|
||||||
/* $OpenBSD: edit.h,v 1.8 2005/03/28 21:28:22 deraadt Exp $ */
|
/* $OpenBSD: edit.h,v 1.8 2005/03/28 21:28:22 deraadt Exp $ */
|
||||||
/* $OpenBSD: emacs.c,v 1.37 2005/03/30 17:16:37 deraadt Exp $ */
|
/* $OpenBSD: emacs.c,v 1.37 2005/03/30 17:16:37 deraadt Exp $ */
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <libgen.h>
|
#include <libgen.h>
|
||||||
|
|
||||||
__RCSID("$MirOS: src/bin/mksh/edit.c,v 1.3 2005/05/23 16:23:18 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/edit.c,v 1.4 2005/05/25 23:31:05 tg Exp $");
|
||||||
|
|
||||||
#define BEL 0x07
|
#define BEL 0x07
|
||||||
|
|
||||||
@@ -72,8 +72,7 @@ x_init(void)
|
|||||||
|
|
||||||
if (setsig(&sigtraps[SIGWINCH], x_sigwinch, SS_RESTORE_ORIG|SS_SHTRAP))
|
if (setsig(&sigtraps[SIGWINCH], x_sigwinch, SS_RESTORE_ORIG|SS_SHTRAP))
|
||||||
sigtraps[SIGWINCH].flags |= TF_SHELL_USES;
|
sigtraps[SIGWINCH].flags |= TF_SHELL_USES;
|
||||||
got_sigwinch = 1; /* force initial check */
|
check_sigwinch(); /* force initial check */
|
||||||
check_sigwinch();
|
|
||||||
|
|
||||||
x_init_emacs();
|
x_init_emacs();
|
||||||
}
|
}
|
||||||
@@ -88,7 +87,6 @@ x_sigwinch(int sig __attribute__((unused)))
|
|||||||
static void
|
static void
|
||||||
check_sigwinch(void)
|
check_sigwinch(void)
|
||||||
{
|
{
|
||||||
if (got_sigwinch) {
|
|
||||||
struct winsize ws;
|
struct winsize ws;
|
||||||
|
|
||||||
got_sigwinch = 0;
|
got_sigwinch = 0;
|
||||||
@@ -112,7 +110,6 @@ check_sigwinch(void)
|
|||||||
setint(vp, (long) ws.ws_row);
|
setint(vp, (long) ws.ws_row);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* read an edited command line
|
* read an edited command line
|
||||||
@@ -426,6 +423,9 @@ x_file_glob(int flags __attribute__((unused)), const char *str,
|
|||||||
escaping = 1;
|
escaping = 1;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
/* specially escape escaped [ for globbing */
|
||||||
|
if (escaping && toglob[i] == '[')
|
||||||
|
toglob[idx++] = QCHAR;
|
||||||
|
|
||||||
toglob[idx] = toglob[i];
|
toglob[idx] = toglob[i];
|
||||||
idx++;
|
idx++;
|
||||||
@@ -440,7 +440,7 @@ x_file_glob(int flags __attribute__((unused)), const char *str,
|
|||||||
s = pushs(SWSTR, ATEMP);
|
s = pushs(SWSTR, ATEMP);
|
||||||
s->start = s->str = toglob;
|
s->start = s->str = toglob;
|
||||||
source = s;
|
source = s;
|
||||||
if (yylex(ONEWORD) != LWORD) {
|
if (yylex(ONEWORD|LQCHAR) != LWORD) {
|
||||||
source = sold;
|
source = sold;
|
||||||
internal_errorf(0, "fileglob: substitute error");
|
internal_errorf(0, "fileglob: substitute error");
|
||||||
return 0;
|
return 0;
|
||||||
@@ -877,7 +877,7 @@ x_escape(const char *s, size_t len, int (*putbuf_func) (const char *, size_t))
|
|||||||
int rval=0;
|
int rval=0;
|
||||||
|
|
||||||
for (add = 0, wlen = len; wlen - add > 0; add++) {
|
for (add = 0, wlen = len; wlen - add > 0; add++) {
|
||||||
if (strchr("\\$()[]{}*&;#|<>\"'`", s[add]) || strchr(ifs, s[add])) {
|
if (strchr("\\$()[{}*&;#|<>\"'`", s[add]) || strchr(ifs, s[add])) {
|
||||||
if (putbuf_func(s, add) != 0) {
|
if (putbuf_func(s, add) != 0) {
|
||||||
rval = -1;
|
rval = -1;
|
||||||
break;
|
break;
|
||||||
@@ -2473,6 +2473,7 @@ x_version(int c __attribute__((unused)))
|
|||||||
int lim = x_lastcp() - xbp;
|
int lim = x_lastcp() - xbp;
|
||||||
char *v = strdup(ksh_version + 4);
|
char *v = strdup(ksh_version + 4);
|
||||||
|
|
||||||
|
check_sigwinch(); /* mksh hack ;-) */
|
||||||
xbuf = xbp = xcp = v;
|
xbuf = xbp = xcp = v;
|
||||||
xend = xep = v + strlen(v);
|
xend = xep = v + strlen(v);
|
||||||
x_redraw(lim);
|
x_redraw(lim);
|
||||||
|
42
funcs.c
42
funcs.c
@@ -1,4 +1,4 @@
|
|||||||
/** $MirOS: src/bin/mksh/funcs.c,v 1.8 2005/05/25 13:46:00 tg Exp $ */
|
/** $MirOS: src/bin/mksh/funcs.c,v 1.9 2005/05/25 23:31:06 tg Exp $ */
|
||||||
/* $OpenBSD: c_ksh.c,v 1.27 2005/03/30 17:16:37 deraadt Exp $ */
|
/* $OpenBSD: c_ksh.c,v 1.27 2005/03/30 17:16:37 deraadt Exp $ */
|
||||||
/* $OpenBSD: c_sh.c,v 1.29 2005/03/30 17:16:37 deraadt Exp $ */
|
/* $OpenBSD: c_sh.c,v 1.29 2005/03/30 17:16:37 deraadt Exp $ */
|
||||||
/* $OpenBSD: c_test.c,v 1.17 2005/03/30 17:16:37 deraadt Exp $ */
|
/* $OpenBSD: c_test.c,v 1.17 2005/03/30 17:16:37 deraadt Exp $ */
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
#include <ulimit.h>
|
#include <ulimit.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
__RCSID("$MirOS: src/bin/mksh/funcs.c,v 1.8 2005/05/25 13:46:00 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/funcs.c,v 1.9 2005/05/25 23:31:06 tg Exp $");
|
||||||
|
|
||||||
int
|
int
|
||||||
c_cd(char **wp)
|
c_cd(char **wp)
|
||||||
@@ -2822,18 +2822,6 @@ c_ulimit(char **wp)
|
|||||||
char option;
|
char option;
|
||||||
} limits[] = {
|
} limits[] = {
|
||||||
/* Do not use options -H, -S or -a */
|
/* Do not use options -H, -S or -a */
|
||||||
#ifdef RLIMIT_CPU
|
|
||||||
{ "time(cpu-seconds)", RLIMIT, RLIMIT_CPU, RLIMIT_CPU,
|
|
||||||
1, 't' },
|
|
||||||
#endif
|
|
||||||
#ifdef RLIMIT_TIME
|
|
||||||
{ "humantime(seconds)", RLIMIT, RLIMIT_TIME, RLIMIT_TIME,
|
|
||||||
1, 'T' },
|
|
||||||
#endif
|
|
||||||
#ifdef RLIMIT_FSIZE
|
|
||||||
{ "file(blocks)", RLIMIT, RLIMIT_FSIZE, RLIMIT_FSIZE,
|
|
||||||
512, 'f' },
|
|
||||||
#endif
|
|
||||||
#ifdef RLIMIT_CORE
|
#ifdef RLIMIT_CORE
|
||||||
{ "coredump(blocks)", RLIMIT, RLIMIT_CORE, RLIMIT_CORE,
|
{ "coredump(blocks)", RLIMIT, RLIMIT_CORE, RLIMIT_CORE,
|
||||||
512, 'c' },
|
512, 'c' },
|
||||||
@@ -2842,9 +2830,13 @@ c_ulimit(char **wp)
|
|||||||
{ "data(KiB)", RLIMIT, RLIMIT_DATA, RLIMIT_DATA,
|
{ "data(KiB)", RLIMIT, RLIMIT_DATA, RLIMIT_DATA,
|
||||||
1024, 'd' },
|
1024, 'd' },
|
||||||
#endif
|
#endif
|
||||||
#ifdef RLIMIT_STACK
|
#ifdef RLIMIT_FSIZE
|
||||||
{ "stack(KiB)", RLIMIT, RLIMIT_STACK, RLIMIT_STACK,
|
{ "file(blocks)", RLIMIT, RLIMIT_FSIZE, RLIMIT_FSIZE,
|
||||||
1024, 's' },
|
512, 'f' },
|
||||||
|
#endif
|
||||||
|
#ifdef RLIMIT_LOCKS
|
||||||
|
{ "flocks", RLIMIT, RLIMIT_LOCKS, RLIMIT_LOCKS,
|
||||||
|
-1, 'L' },
|
||||||
#endif
|
#endif
|
||||||
#ifdef RLIMIT_MEMLOCK
|
#ifdef RLIMIT_MEMLOCK
|
||||||
{ "lockedmem(KiB)", RLIMIT, RLIMIT_MEMLOCK, RLIMIT_MEMLOCK,
|
{ "lockedmem(KiB)", RLIMIT, RLIMIT_MEMLOCK, RLIMIT_MEMLOCK,
|
||||||
@@ -2862,6 +2854,18 @@ c_ulimit(char **wp)
|
|||||||
{ "processes", RLIMIT, RLIMIT_NPROC, RLIMIT_NPROC,
|
{ "processes", RLIMIT, RLIMIT_NPROC, RLIMIT_NPROC,
|
||||||
1, 'p' },
|
1, 'p' },
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef RLIMIT_STACK
|
||||||
|
{ "stack(KiB)", RLIMIT, RLIMIT_STACK, RLIMIT_STACK,
|
||||||
|
1024, 's' },
|
||||||
|
#endif
|
||||||
|
#ifdef RLIMIT_TIME
|
||||||
|
{ "humantime(seconds)", RLIMIT, RLIMIT_TIME, RLIMIT_TIME,
|
||||||
|
1, 'T' },
|
||||||
|
#endif
|
||||||
|
#ifdef RLIMIT_CPU
|
||||||
|
{ "time(cpu-seconds)", RLIMIT, RLIMIT_CPU, RLIMIT_CPU,
|
||||||
|
1, 't' },
|
||||||
|
#endif
|
||||||
#ifdef RLIMIT_VMEM
|
#ifdef RLIMIT_VMEM
|
||||||
{ "vmemory(KiB)", RLIMIT, RLIMIT_VMEM, RLIMIT_VMEM,
|
{ "vmemory(KiB)", RLIMIT, RLIMIT_VMEM, RLIMIT_VMEM,
|
||||||
1024, 'v' },
|
1024, 'v' },
|
||||||
@@ -2869,10 +2873,6 @@ c_ulimit(char **wp)
|
|||||||
#ifdef RLIMIT_SWAP
|
#ifdef RLIMIT_SWAP
|
||||||
{ "swap(KiB)", RLIMIT, RLIMIT_SWAP, RLIMIT_SWAP,
|
{ "swap(KiB)", RLIMIT, RLIMIT_SWAP, RLIMIT_SWAP,
|
||||||
1024, 'w' },
|
1024, 'w' },
|
||||||
#endif
|
|
||||||
#ifdef RLIMIT_LOCKS
|
|
||||||
{ "flocks", RLIMIT, RLIMIT_LOCKS, RLIMIT_LOCKS,
|
|
||||||
-1, 'L' },
|
|
||||||
#endif
|
#endif
|
||||||
{ NULL, 0, 0, 0, 0, 0 }
|
{ NULL, 0, 0, 0, 0, 0 }
|
||||||
};
|
};
|
||||||
|
11
lex.c
11
lex.c
@@ -1,11 +1,11 @@
|
|||||||
/** $MirOS: src/bin/mksh/lex.c,v 1.1 2005/05/23 03:06:08 tg Exp $ */
|
/** $MirOS: src/bin/mksh/lex.c,v 1.2 2005/05/25 23:31:07 tg Exp $ */
|
||||||
/* $OpenBSD: lex.c,v 1.36 2005/03/30 17:16:37 deraadt Exp $ */
|
/* $OpenBSD: lex.c,v 1.36 2005/03/30 17:16:37 deraadt Exp $ */
|
||||||
|
|
||||||
#include "sh.h"
|
#include "sh.h"
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <libgen.h>
|
#include <libgen.h>
|
||||||
|
|
||||||
__RCSID("$MirOS: src/bin/mksh/lex.c,v 1.1 2005/05/23 03:06:08 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/lex.c,v 1.2 2005/05/25 23:31:07 tg Exp $");
|
||||||
|
|
||||||
/* Structure to keep track of the lexing state and the various pieces of info
|
/* Structure to keep track of the lexing state and the various pieces of info
|
||||||
* needed for each particular state.
|
* needed for each particular state.
|
||||||
@@ -342,6 +342,13 @@ yylex(int cf)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case QCHAR:
|
||||||
|
if (cf & LQCHAR) {
|
||||||
|
*wp++ = QCHAR;
|
||||||
|
*wp++ = getsc();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
/* FALLTHRU */
|
||||||
default:
|
default:
|
||||||
*wp++ = CHAR, *wp++ = c;
|
*wp++ = CHAR, *wp++ = c;
|
||||||
}
|
}
|
||||||
|
7
main.c
7
main.c
@@ -1,4 +1,4 @@
|
|||||||
/** $MirOS: src/bin/mksh/main.c,v 1.6 2005/05/25 13:46:01 tg Exp $ */
|
/** $MirOS: src/bin/mksh/main.c,v 1.7 2005/05/25 23:31:07 tg Exp $ */
|
||||||
/* $OpenBSD: main.c,v 1.38 2005/03/30 17:16:37 deraadt Exp $ */
|
/* $OpenBSD: main.c,v 1.38 2005/03/30 17:16:37 deraadt Exp $ */
|
||||||
/* $OpenBSD: tty.c,v 1.8 2005/03/30 17:16:37 deraadt Exp $ */
|
/* $OpenBSD: tty.c,v 1.8 2005/03/30 17:16:37 deraadt Exp $ */
|
||||||
/* $OpenBSD: io.c,v 1.21 2005/03/30 17:16:37 deraadt Exp $ */
|
/* $OpenBSD: io.c,v 1.21 2005/03/30 17:16:37 deraadt Exp $ */
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <pwd.h>
|
#include <pwd.h>
|
||||||
|
|
||||||
__RCSID("$MirOS: src/bin/mksh/main.c,v 1.6 2005/05/25 13:46:01 tg Exp $");
|
__RCSID("$MirOS: src/bin/mksh/main.c,v 1.7 2005/05/25 23:31:07 tg Exp $");
|
||||||
|
|
||||||
extern char **environ;
|
extern char **environ;
|
||||||
|
|
||||||
@@ -49,8 +49,7 @@ static const char *initcoms [] = {
|
|||||||
/* this is what at&t ksh seems to track, with the addition of emacs */
|
/* this is what at&t ksh seems to track, with the addition of emacs */
|
||||||
"alias", "-tU",
|
"alias", "-tU",
|
||||||
"cat", "cc", "chmod", "cp", "date", "ed", "emacs", "grep", "ls",
|
"cat", "cc", "chmod", "cp", "date", "ed", "emacs", "grep", "ls",
|
||||||
"mail", "make", "mv", "pr", "rm", "sed", "sh", "vi", "who",
|
"make", "mv", "pr", "rm", "sed", "sh", "vi", "who", NULL,
|
||||||
NULL,
|
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
77
mksh.1
77
mksh.1
@@ -1,13 +1,11 @@
|
|||||||
.\" $MirOS: src/bin/mksh/mksh.1,v 1.4 2005/05/25 14:15:40 tg Exp $
|
.\" $MirOS: src/bin/mksh/mksh.1,v 1.5 2005/05/25 23:31:07 tg Exp $
|
||||||
.\" $OpenBSD: ksh.1,v 1.98 2005/05/12 09:18:24 jmc Exp $
|
.\" $OpenBSD: ksh.1,v 1.98 2005/05/12 09:18:24 jmc Exp $
|
||||||
.\" $OpenBSD: sh.1tbl,v 1.53 2004/12/10 01:56:56 jaredy Exp $
|
.\" $OpenBSD: sh.1tbl,v 1.53 2004/12/10 01:56:56 jaredy Exp $
|
||||||
.\"
|
.\"-
|
||||||
.\" Public Domain
|
|
||||||
.\"
|
|
||||||
.Dd May 22, 2005
|
.Dd May 22, 2005
|
||||||
.Dt MKSH 1
|
.Dt MKSH 1
|
||||||
.Os MirOS
|
.Os MirOS
|
||||||
.\" define Mx macro for portable mksh, just in case...
|
.\" this macro only exists in MirNroff by default
|
||||||
.de Mx
|
.de Mx
|
||||||
.nr cF \\n(.f
|
.nr cF \\n(.f
|
||||||
.nr cZ \\n(.s
|
.nr cZ \\n(.s
|
||||||
@@ -202,7 +200,8 @@ In the absence of fatal errors,
|
|||||||
the exit status is that of the last command executed, or zero, if no
|
the exit status is that of the last command executed, or zero, if no
|
||||||
command is executed.
|
command is executed.
|
||||||
.Ss Command syntax
|
.Ss Command syntax
|
||||||
The shell begins parsing its input by breaking it into
|
The shell begins parsing its input by removing any backslash-newline
|
||||||
|
combinations, then breaking it into
|
||||||
.Em words .
|
.Em words .
|
||||||
Words, which are sequences of characters, are delimited by unquoted whitespace
|
Words, which are sequences of characters, are delimited by unquoted whitespace
|
||||||
characters (space, tab, and newline) or meta-characters
|
characters (space, tab, and newline) or meta-characters
|
||||||
@@ -1184,6 +1183,10 @@ If
|
|||||||
is omitted, the string
|
is omitted, the string
|
||||||
.Dq parameter null or not set
|
.Dq parameter null or not set
|
||||||
is used instead.
|
is used instead.
|
||||||
|
Currently a bug, if
|
||||||
|
.Ar word
|
||||||
|
is a variable which expands to the null string, the
|
||||||
|
error message is also printed.
|
||||||
.El
|
.El
|
||||||
.Pp
|
.Pp
|
||||||
In the above modifiers, the
|
In the above modifiers, the
|
||||||
@@ -1487,8 +1490,7 @@ colon, or two adjacent colons, is treated as a
|
|||||||
.Sq \&.
|
.Sq \&.
|
||||||
(the current directory).
|
(the current directory).
|
||||||
.It Ev PGRP
|
.It Ev PGRP
|
||||||
The current process group, see
|
The current process group (read-only).
|
||||||
.Xr getpgrp 2 .
|
|
||||||
.It Ev PPID
|
.It Ev PPID
|
||||||
The process ID of the shell's parent (read-only).
|
The process ID of the shell's parent (read-only).
|
||||||
.It Ev PS1
|
.It Ev PS1
|
||||||
@@ -1916,7 +1918,8 @@ escapes for
|
|||||||
.Ql ` ,
|
.Ql ` ,
|
||||||
.Ql \e ,
|
.Ql \e ,
|
||||||
and
|
and
|
||||||
.Ql \enewline .
|
.Ql \enewline ;
|
||||||
|
any backslash preceding double quotes is removed.
|
||||||
If multiple here documents are used on the same command line, they are saved in
|
If multiple here documents are used on the same command line, they are saved in
|
||||||
order.
|
order.
|
||||||
.It \*(Lt\*(Lt- Ar marker
|
.It \*(Lt\*(Lt- Ar marker
|
||||||
@@ -2026,11 +2029,13 @@ integers may be prefixed with
|
|||||||
.Sq 0X
|
.Sq 0X
|
||||||
or
|
or
|
||||||
.Sq 0x
|
.Sq 0x
|
||||||
(specifying base 16), similar to AT&T ksh,
|
(specifying base 16), similar to AT&T
|
||||||
|
.Nm ksh ,
|
||||||
or
|
or
|
||||||
.Sq 0
|
.Sq 0
|
||||||
(base 8), as an mksh extension,
|
(base 8), as an
|
||||||
in all forms of arithmetic expressions,
|
.Nm
|
||||||
|
extension, in all forms of arithmetic expressions,
|
||||||
except as numeric arguments to the
|
except as numeric arguments to the
|
||||||
.Ic test
|
.Ic test
|
||||||
command.
|
command.
|
||||||
@@ -2165,8 +2170,8 @@ Some notes concerning co-processes:
|
|||||||
.It
|
.It
|
||||||
The only way to close the co-process's input (so the co-process reads an
|
The only way to close the co-process's input (so the co-process reads an
|
||||||
end-of-file) is to redirect the input to a numbered file descriptor and then
|
end-of-file) is to redirect the input to a numbered file descriptor and then
|
||||||
close that file descriptor e.g.\&
|
close that file descriptor:
|
||||||
.Ic exec 3\*(Gt&p; exec 3\*(Gt&- .
|
.Ic exec 3\*(Gt&p; exec 3\*(Gt&-
|
||||||
.It
|
.It
|
||||||
In order for co-processes to share a common output, the shell must keep the
|
In order for co-processes to share a common output, the shell must keep the
|
||||||
write portion of the output pipe open.
|
write portion of the output pipe open.
|
||||||
@@ -2470,7 +2475,8 @@ argument to the
|
|||||||
.Fl t
|
.Fl t
|
||||||
test may be left out and defaults to 1).
|
test may be left out and defaults to 1).
|
||||||
.It
|
.It
|
||||||
Tilde expansion after equal signs is disabled.
|
Tilde expansion after equal signs (not assignments) is disabled,
|
||||||
|
although not strictly forbidden by POSIX, for consistency with other shells.
|
||||||
.El
|
.El
|
||||||
.Ss Strict Bourne shell mode
|
.Ss Strict Bourne shell mode
|
||||||
When the
|
When the
|
||||||
@@ -2508,6 +2514,15 @@ Sequences of
|
|||||||
.Sq ((...))
|
.Sq ((...))
|
||||||
are not interpreted as arithmetic expressions.
|
are not interpreted as arithmetic expressions.
|
||||||
.El
|
.El
|
||||||
|
.Pp
|
||||||
|
This does not make
|
||||||
|
.Nm
|
||||||
|
a real bourne shell emulation, though.
|
||||||
|
Access to many enhanced features is still available, and
|
||||||
|
.Ql ^
|
||||||
|
as synonym for
|
||||||
|
.Ql |
|
||||||
|
has probably not been in use since the 1980s anyway.
|
||||||
.Ss Command execution
|
.Ss Command execution
|
||||||
After evaluation of command-line arguments, redirections, and parameter
|
After evaluation of command-line arguments, redirections, and parameter
|
||||||
assignments, the type of command is determined: a special built-in, a
|
assignments, the type of command is determined: a special built-in, a
|
||||||
@@ -3795,7 +3810,7 @@ characters), or if it is a unary operator like
|
|||||||
or
|
or
|
||||||
.Sq Fl n .
|
.Sq Fl n .
|
||||||
Use tests like
|
Use tests like
|
||||||
.Dq if \&[ \&"X$foo\&" = Xbar \&]
|
.Dq if \&[ x\&"$foo\&" = x"bar" \&]
|
||||||
instead.
|
instead.
|
||||||
.Pp
|
.Pp
|
||||||
.It Xo
|
.It Xo
|
||||||
@@ -4070,7 +4085,7 @@ except zero padding is used instead of space padding.
|
|||||||
.Pp
|
.Pp
|
||||||
.It Xo
|
.It Xo
|
||||||
.Ic ulimit
|
.Ic ulimit
|
||||||
.Op Fl acdfHlmnpSsTtv
|
.Op Fl acdfHLlmnpSsTtvw
|
||||||
.Op Ar value
|
.Op Ar value
|
||||||
.Xc
|
.Xc
|
||||||
Display or set process limits.
|
Display or set process limits.
|
||||||
@@ -4108,6 +4123,8 @@ blocks on files written by the shell and its child processes (files of any
|
|||||||
size may be read).
|
size may be read).
|
||||||
.It Fl H
|
.It Fl H
|
||||||
Set the hard limit only (the default is to set both hard and soft limits).
|
Set the hard limit only (the default is to set both hard and soft limits).
|
||||||
|
.It Fl L Ar n
|
||||||
|
Control flocks; documentation is missing.
|
||||||
.It Fl l Ar n
|
.It Fl l Ar n
|
||||||
Impose a limit of
|
Impose a limit of
|
||||||
.Ar n
|
.Ar n
|
||||||
@@ -4142,6 +4159,10 @@ CPU seconds spent in user mode to be used by each process.
|
|||||||
Impose a limit of
|
Impose a limit of
|
||||||
.Ar n
|
.Ar n
|
||||||
kibibytes on the amount of virtual memory used.
|
kibibytes on the amount of virtual memory used.
|
||||||
|
.It Fl w Ar n
|
||||||
|
Impose a limit of
|
||||||
|
.Ar n
|
||||||
|
kibibytes on the amount of swap space used.
|
||||||
.El
|
.El
|
||||||
.Pp
|
.Pp
|
||||||
As far as
|
As far as
|
||||||
@@ -4473,7 +4494,7 @@ an
|
|||||||
(if the command can be prefixed with a count); and any keys the command is
|
(if the command can be prefixed with a count); and any keys the command is
|
||||||
bound to by default, written using caret notation
|
bound to by default, written using caret notation
|
||||||
e.g. the ASCII ESC character is written as ^[.
|
e.g. the ASCII ESC character is written as ^[.
|
||||||
^[A-Z] sequences are not case sensitive.
|
These control sequences are not case sensitive.
|
||||||
A count prefix for a command is entered using the sequence
|
A count prefix for a command is entered using the sequence
|
||||||
.Pf ^[ Ns Ar n ,
|
.Pf ^[ Ns Ar n ,
|
||||||
where
|
where
|
||||||
@@ -4547,11 +4568,6 @@ is appended.
|
|||||||
If there is no command or file name with the current partial word
|
If there is no command or file name with the current partial word
|
||||||
as its prefix, a bell character is output (usually causing a beep to be
|
as its prefix, a bell character is output (usually causing a beep to be
|
||||||
sounded).
|
sounded).
|
||||||
.\" XXX
|
|
||||||
Currently being considered a bug,
|
|
||||||
if the file name contains \fB[\fR or \fB]\fR, it cannot be completed, even if
|
|
||||||
the character is escaped, in \fBemacs\fR mode.
|
|
||||||
This surprisingly works in \fBvi\fR mode; please submit a fix.
|
|
||||||
.It complete-command: ^X^[
|
.It complete-command: ^X^[
|
||||||
Automatically completes as much as is unique of the command name having the
|
Automatically completes as much as is unique of the command name having the
|
||||||
partial word up to the cursor as its prefix, as in the
|
partial word up to the cursor as its prefix, as in the
|
||||||
@@ -4569,6 +4585,7 @@ If only one completion is possible,
|
|||||||
match as in the
|
match as in the
|
||||||
.Ic complete
|
.Ic complete
|
||||||
command above.
|
command above.
|
||||||
|
Note that ^I is usually generated by the TAB (tabulator) key.
|
||||||
.It Xo delete-char-backward:
|
.It Xo delete-char-backward:
|
||||||
.Op Ar n
|
.Op Ar n
|
||||||
.No ERASE , ^? , ^H
|
.No ERASE , ^? , ^H
|
||||||
@@ -4826,13 +4843,6 @@ colon
|
|||||||
commands).
|
commands).
|
||||||
.El
|
.El
|
||||||
.Pp
|
.Pp
|
||||||
Note that the ^X stands for control-X; also
|
|
||||||
.Aq esc ,
|
|
||||||
.Aq space ,
|
|
||||||
and
|
|
||||||
.Aq tab
|
|
||||||
are used for escape, space, and tab, respectively (no kidding).
|
|
||||||
.Pp
|
|
||||||
Like
|
Like
|
||||||
.Xr vi 1 ,
|
.Xr vi 1 ,
|
||||||
there are two modes:
|
there are two modes:
|
||||||
@@ -5367,6 +5377,7 @@ Shell database.
|
|||||||
.Xr dup 2 ,
|
.Xr dup 2 ,
|
||||||
.Xr execve 2 ,
|
.Xr execve 2 ,
|
||||||
.Xr getgid 2 ,
|
.Xr getgid 2 ,
|
||||||
|
.Xr getpgrp 2 ,
|
||||||
.Xr getuid 2 ,
|
.Xr getuid 2 ,
|
||||||
.Xr open 2 ,
|
.Xr open 2 ,
|
||||||
.Xr pipe 2 ,
|
.Xr pipe 2 ,
|
||||||
@@ -5425,9 +5436,3 @@ The
|
|||||||
author is aware of this and there is no need to report it.
|
author is aware of this and there is no need to report it.
|
||||||
This does not work because the last command of a pipe sequence
|
This does not work because the last command of a pipe sequence
|
||||||
is run in a subshell.
|
is run in a subshell.
|
||||||
.Pp
|
|
||||||
For another known bug, refer to the comment above the
|
|
||||||
.Em complete-command
|
|
||||||
paragraph in the section
|
|
||||||
.Sx Emacs editing mode
|
|
||||||
above.
|
|
||||||
|
3
sh.h
3
sh.h
@@ -1,4 +1,4 @@
|
|||||||
/** $MirOS: src/bin/mksh/sh.h,v 1.7 2005/05/25 13:46:01 tg Exp $ */
|
/** $MirOS: src/bin/mksh/sh.h,v 1.8 2005/05/25 23:31:08 tg Exp $ */
|
||||||
/* $OpenBSD: sh.h,v 1.27 2005/03/28 21:33:04 deraadt Exp $ */
|
/* $OpenBSD: sh.h,v 1.27 2005/03/28 21:33:04 deraadt Exp $ */
|
||||||
/* $OpenBSD: shf.h,v 1.5 2005/03/30 17:16:37 deraadt Exp $ */
|
/* $OpenBSD: shf.h,v 1.5 2005/03/30 17:16:37 deraadt Exp $ */
|
||||||
/* $OpenBSD: table.h,v 1.6 2004/12/18 20:55:52 millert Exp $ */
|
/* $OpenBSD: table.h,v 1.6 2004/12/18 20:55:52 millert Exp $ */
|
||||||
@@ -995,6 +995,7 @@ typedef union {
|
|||||||
#define ESACONLY BIT(7) /* only accept esac keyword */
|
#define ESACONLY BIT(7) /* only accept esac keyword */
|
||||||
#define CMDWORD BIT(8) /* parsing simple command (alias related) */
|
#define CMDWORD BIT(8) /* parsing simple command (alias related) */
|
||||||
#define HEREDELIM BIT(9) /* parsing <<,<<- delimiter */
|
#define HEREDELIM BIT(9) /* parsing <<,<<- delimiter */
|
||||||
|
#define LQCHAR BIT(10) /* source string contains QCHAR */
|
||||||
|
|
||||||
#define HERES 10 /* max << in line */
|
#define HERES 10 /* max << in line */
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user