Commit Graph

4085 Commits

Author SHA1 Message Date
kre d1668f2837 More markup errors. \+ was intended to be \&+ and .EV .Ev of course.
As best I can tell, the rest of what mandoc -Wall complains about is
incorrect (it could probably be avoided by adding more markup, but
there doesn't seem to be any point).
2022-12-20 17:51:54 +00:00
kre d51e0a2e8a Using .Cm Cm makes no sense at all - no idea what I was thinking there
(perhaps just an editing error).
2022-12-20 16:48:57 +00:00
uwe c14a7046e4 sh(1): Fix markup. -compact must be last. 2022-12-20 01:18:42 +00:00
kre e2731928b1 It appears that POSIX intends to add a -d X option to the read command
in its next version, so it can be used as -d '' (to specify a \0 end
character for the record read, rather than the default \n) to accompany
find -print0 and xargs -0 options (also likely to be added).

Add support for -d now.   While here fix a bug where escaped nul
chars (\ \0) in non-raw mode were not being dropped, as they are
when not escaped (if not dropped, they're still not used in any
useful way, they just ended the value at that point).
2022-12-11 08:23:10 +00:00
andvar 8a36802c94 fix various typos in comments and one output message. 2022-10-31 21:22:05 +00:00
kre 1c627bdffa PR bin/57053 is related (peripherally) here.
sh has been remembering the process group of a job for a while now, but
using that for almost nothing.

The old way to resume a job, was to try each pid in the job with a
SIGCONT (using it as the process group identifier via killpg()) until
one worked (or none did, in which case resuming would be impossible,
but that never actually happened).   This wasn't as bad as it seems,
as in practice the first process attempted was *always* the correct
one.  Why the loop was considered necessary I am not sure.  Nothing
but the first could possibly work.

This worked until a fix for an obscure possible bug was added a
while ago - now a process which has already finished, and had its
zombie collected via wait*() is no longer ever considered to have
a pid which is a candidate for use in any system call.  That's
because the kernel might have reassigned that pid for some newly
created process (we have no idea how much time might have passed
since the pid was returned to the kernel for reuse, it might have
happened weeks ago).

This is where the example in bin/57053 revealed a problem.

That PR is really about a quite different problem in zsh (from pksrc)
and should be pkg/57053, but as the test case also hit the problem
here, it was assumed (by some) they were the same issue.

The example is (in a small directory)
	ls | less
which is then suspended (^Z), and resumed (fg).   Since the directory
is small, ls will be finished, and reaped by sh - so the code would
now refuse to use its pid for the killpg() call to send the SIGCONT.
The (useless) loop would attempt to use less's pid for this purpose
(it is still alive at this point) but that would fail, as that pid
is not a process group identifier, of anything.   Hence the job
could not be resumed.

Before the PR (or preceding mailing list discussion) the change here
had already been made (part of a much bigger set of changes, some of
which might follow - sometime).   We now actually use the job's
remembered process group identifier when we want the process group
identifier, instead of trying to guess which pid it happens to be
(which actually never took any guessing, it was, and is always the
pid of the first process created for the job).   A couple of minor
fixes to how the pgrp is obtained, and used, accompany the changes
to use it when appropriate.
2022-10-30 01:46:16 +00:00
kre ec520a6a57 Note in the description of "jobs -p" that the process id returned is
also the process group identifier (that's a requirement from POSIX, and
is what we have always done - just not been explicit about in sh.1).
Add a note that this value and $! are not necessarily the same (currently,
and perhaps forever, never the same in a pipeline with 2 or more elements).
2022-10-30 01:19:08 +00:00
christos 9337b5ddea Add -f option to set the time. From FreeBSD. 2022-10-22 20:11:43 +00:00
kre 9eccf618bb Oops, somehow managed to commit an older version where NBSH_INVOCATION
start char was '@' rather than '!' (which meant not lexically ordered).
This is how it was intended to be (and is documented).
2022-09-18 17:11:33 +00:00
kre e7b0505e69 Add the -l option (aka -o login): be a login shell. Meaningful only on
the command line (with both - and + forms) - overrides the presence (or
otherwise) of a '-' as argv[0][0].

Since this allows any shell to be a login shell (which simply means that
it runs /etc/profile and ~/.profile at shell startup - there are no other
side effects) add a new, always set at startup, variable NBSH_INVOCATION
which has a char string as its value, where each char has a meaning,
more or less related to how the shell was started.   See sh(1).
This is intended to allow those startup scripts to tailor their behaviour
to the nature of this particular login shell (it is possible to detect
whether a shell is a login shell merely because of -l, or whether it would
have been anyway, before the -l option was added - and more).   The
var could also be used to set different values for $ENV for different
uses of the shell.
2022-09-18 06:03:19 +00:00
kre e1f658a30d More wording improvements. There might be more to come. 2022-09-16 19:25:09 +00:00
kre f9baa2eaae Minor wording improvements.
Note these do not alter anything about what the man page specifies,
just say a couple of things in a slightly better way, hence no Dd
update accompanies this change (deliberately).
2022-09-16 17:32:18 +00:00
kre c5917dbfa8 Move a comment that used to be in the correct place, once upon a time,
back where it belongs, and make it stand out more, so other text is
less likely to find itself pushed between the comment and the text
to which it appears.   This change should make no visible difference
to the man page displayed.
2022-09-16 17:29:21 +00:00
kre 65d376a4f6 Whitespace. 2022-09-16 17:25:09 +00:00
kre 258641d776 Correct spelling of terminal (it doesn't have a 2nd m). 2022-09-15 18:00:36 +00:00
martin ea9288bf30 Fix the build for variants that do not define EDIT. 2022-09-15 11:35:06 +00:00
christos e473cf6a19 Update editing before prompt printing. 2022-09-14 17:06:16 +00:00
christos d0aa7ee82f defer editing setup/cleanup to when we are interactive. 2022-09-14 16:15:51 +00:00
hgutch ec184f3bfb Change back various occurrences of \*[Le], \*[Ge] (less/greater equal)
and \*(ua (upwards arrow) to literal "<=", ">=" and "^" whenever
appropriate (e.g., in code examples).
2022-08-28 10:48:15 +00:00
dholland cc9598fccf PR 56983 Izumi Tsutsui: fix confusing message in test(1) with -DSMALL 2022-08-27 21:18:39 +00:00
kre f5b9e602e2 Add debugging trace points for history and the editline interface.
NFC for any normal shell (not compiled with debugging (sh DEBUG) enabled.

We have had a defined debug mode for this for years, but since I have
not often played in this arena, never used it.  Until recently (relatively).
This (or a small part of it) played a part in discovering the fc -e
bug cause.   I have had it in my tree a while now - recent changes
kept causing merge conflicts (all because I hadn't bothered to commit
this), so I think now is the time...
2022-08-22 17:33:11 +00:00
nia 29c67fe23d sh(1): revert previous because it interferes with custom user bindings 2022-08-21 21:35:36 +00:00
uwe 21531a4577 ksh(1): fix pasto in the description of the -l option. 2022-08-21 20:12:37 +00:00
kre 16e67595a2 Improve the description of the read builtin command. 2022-08-19 13:37:03 +00:00
kre a1f6605654 Don't output the error for bad usage (no var name given)
after already writing the prompt (set with the -p option).

That results in nonsense like:

	$ read -p foo
	fooread: arg count

While here, improve the error message so it means something.

Now we will get:

$ read -p foo
read: variable name required
Usage: read [-r] [-p prompt] var...

[Detected by code reading while doing the work for the previous fix]
2022-08-19 12:52:31 +00:00
kre 143e8d551e PR bin/56972 Fix escape ('\') handling in sh read builtin.
In 1.35 (March 2005) (the big read fixup), most escape handling and IFS
processing in the read builtin was corrected.  However 2 cases were missed,
one is a word (something to be assigned to any variable but the last) in
which every character is escaped (the code was relying on a non-escaped char
to set the "in a word" status), and second trailing IFS whitespace at
the end of the line was being deleted, even if the chars had been escaped
(the escape chars are no longer present).

See the PR for more details (including the case that detected the problem).

After fixing this, I looked at the FreeBSD code (normally might do it
before, but these fixes were trivial) to check their implementation.
Their code does similar things to ours now does, but in a completely
different way, their read builtin is more complex than ours needs to
be (they handle more options).   For anyone tempted to simply incorporate
their code, note that it relies upon infrastructure changes elsewhere
in the shell, so would not be a simple cut and drop in exercise.

This needs pullups to -3 -4 -5 -6 -7 -8 and -9 (fortunately this is
happening before -10 is branched, so will never be broken this way there).
2022-08-19 12:17:18 +00:00
nia 16c8f5ddd4 sh(1): Allow an explicit set -o vi or set -o emacs to override ~/.editrc 2022-08-18 14:10:05 +00:00
nia 635122b300 sh(1): Assign the tab completion key binding last so a user having
"bind -v" or "bind -e" in ~/.editrc doesn't cause tab completion
to no longer function.
2022-08-17 22:27:17 +00:00
wiz 1bfd10bdd7 Sync usage with man page. 2022-08-09 08:14:03 +00:00
wiz 3ce29a4c09 Sort options, fix macro, add RCS Id. 2022-08-09 08:13:56 +00:00
kre 2c3bf36b92 Add 4 new flags:
-b (from FreeBSD) - set blocksize to blocks (512 bytes)
		(overrides a contrary setting in BLOCKSIZE)
	-H (from FreeBSD and Linux): -h using SI units (powers of 10).  Ugh.
	-N suppress the header line (except with -P which requires it).
	-f show only free space (or inodes) in a minimal format (implies -N)
		(that is, with one file[system] specified, print 1 number only)
		With -c, show only the total.
		Intended to be useful for scripting (aka, I needed it.)

While here, improve the usage message (group options where they apply,
there is no reason, for example, that -g should be shown differently
to -k -m ..., and those options aren't at all useful with -G)

Update the man page to match.
2022-08-08 16:50:35 +00:00
andvar 5a58ccfbec fix various typos in comments, documentation and messages.
mainly s/paramater/parameter/ and s/reduntant/redundant/.
2022-08-07 11:06:18 +00:00
andvar ec52c87343 kill(1): s/proceses/processes/ 2022-08-07 09:36:55 +00:00
rin 2316fa6ff0 Fix bug revealed by SIGINFO support; Do not treat short read(2)/write(2)
as error (*). This occurs typically when signal is received.

(*) For older version, we already deal with short read(2) from remote
host in sink(). But for other cases, i.e., write(2) to local file in
sink(), read(2)/write(2) in source(), error was raised.

This version of rcp(1) can successfully send/receive files with older
version, even if short read(2)/write(2) occurs by SIGINFO.

Also, when real error occurs, give up immediately instead of continue to
send/receive wrong data.

Clean up the mess a little bit as well...
2022-07-18 13:01:59 +00:00
uwe e7d7b85e33 csh(1): fix punctuation at the end of an .Xr line 2022-07-09 21:19:44 +00:00
kre 8f36a40a4c Fix core dump caused by
ksh -c '(i=10; echo $((++-+++i)))'
reported by Steffen Nurpmeso (not on a NetBSD list or PR).

Seems pointless to fix just one of the bugs in this thing, but this one was
easy enough (and stupid enough).   (The "i=10" part is unimportant, as is the sub-shell).
2022-07-03 06:30:31 +00:00
rin 1ca2da5b85 Add SIGINFO support. Mostly stolen from scan_ffs(8). 2022-06-26 09:29:59 +00:00
andvar ff23aff6ad fix various typos in comments, documentation and messages. 2022-05-31 08:43:13 +00:00
andvar 86c307248f fix various typos, mainly in comments. 2022-05-28 10:36:21 +00:00
andvar b97019535c fix some misspellings and remove trailing whitespaces. 2022-05-20 07:47:16 +00:00
kre 32cc3b0248 Alter error messages so they no longer claim that bad input is illegal. 2022-05-16 10:53:14 +00:00
dholland 4a2334fa92 Clarify that "stty 0" will normally hang up the tty. Bump date. 2022-05-14 21:04:34 +00:00
uwe 0a751ce1a9 date(1): Use .Dl for one-liners. Same output is generated. 2022-05-10 09:07:57 +00:00
uwe 7638fb4e20 date(1): Fix the offset in previous. 2022-05-10 09:00:39 +00:00
wiz 8147634961 date(1): add example for how to get seconds since the Epoch output 2022-05-10 05:37:33 +00:00
kre 21f0086877 Introduce a new macro JNUM to replace the idiom jp-jobtab+1
(the job number, given jp a pointer to a jobs table entry)
used open coded previously in many places (mostly in DEBUG mode
trace messages, so not included in most shells, but there are
a few others).

Make the type of JNUM() be int rather than the ptrdiff_t the
open coded version became ... which when used in some printf()
type function arg list was cast to some other arbitrary (but not
consistent) int type for which there is a standard %Xd type
format conversion.   Now we can (and do) just use %d for this.

If the number of jobs ever exceeds the range of an int, we would
have far more serious problems than the broken output this would
cause.

While here improve a comment or two, and use JOBRUNNING instead
of 0 where the intent is the former (JOBRUNNING is #defined as 0).

NFCI.
2022-04-18 06:02:27 +00:00
andvar e2710f6fc4 fix various typos in comments. 2022-04-17 21:24:52 +00:00
kre f378cfe59e Redo the way the builtin cmd 'ulimit' getopt() (nextopt() really, but it
is essentially the same) arg string is generated, to lessen the chances
that the table of limits, and the arg string that allows limits to be
reported or set will get out of sync.   They weren't (as long as we didn't
grow an RLIMIT_SWAP) this is just tidier.

While here, reorder the limits table fields, and shrink a couple that
were needlessly wasteful, to save some space -- for most architectures
this should save 8 bytes per table entry (there are currently 13).
(Some minor code bloat offsets this slightly because of int type
promotions now required).

NFCI.
2022-04-16 14:26:26 +00:00
kre d17e063cb6 While doing the previous change, I noticed that when used in a
particularly perverse way, the error message for a bad octal
constant as the new umask value could incorrectly claim that the
-S option (which would need to be present to cause this issue)
was the detected bad value.   Fix that to report the actual
incorrect arg.

And while fiddling, also check for args to umask that are too big
to be sane mask values (the biggest permitted is 07777) and use
mode_t as the mask variable type, rather than int.
2022-04-16 14:23:36 +00:00
kre 94d6cf1cd6 Avoid generating error messages implying that user errors are illegal. 2022-04-16 14:20:45 +00:00