Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Path: utzoo!linus!philabs!seismo!hao!hplabs!sri-unix!L...@SRI-AI.ARPA
From: L...@SRI-AI.ARPA@sri-unix.UUCP
Newsgroups: net.unix
Subject: Unix Bugs and Suggestions
Message-ID: <4737@sri-arpa.UUCP>
Date: Wed, 31-Aug-83 13:15:46 EDT
Article-I.D.: sri-arpa.4737
Posted: Wed Aug 31 13:15:46 1983
Date-Received: Sun, 4-Sep-83 00:09:20 EDT
Lines: 280

From:  Ken Laws <L...@SRI-AI.ARPA>

The following are gripes and suggestions that I have accumulated
over several years.  Some may no longer be pertinent, or may never
have been pertinent to systems other than the one I am using.  I
operate in a VAX EUNICE environment emulating Berkeley 4.1c UNIX.
I normally use the csh shell.

					-- Ken Laws




10-Jul-82  Laws at SRI-IU
The APL batch interpreter requires different (and incorrect) syntax
from that required by the interactive interpreter.  For instance,
results do not print unless explicitly assigned to a quad.  There
seems to be a problem with the local variable declaration mechanism.
Statement labels do not work properly.  The .sg operator for negation
is undocumented, making it very difficult to enter a number with a
negative exponent.

10-Jul-82  Laws at SRI-IU
The history mechanism has a flaw.  "!26:0 !:1" fails to pick up arg
1 from command 26, despite what the csh documentation says.
Also, the form !!:s/l/r/ doesn't permit a * or \* in the l string;
evidently the history parser tries to break at the *.  (Minor point:
the csh man page documents s/l/r/ as "substitute l for r" when it
is really "substitute r for l".)

16-Jul-82  Laws at SRI-IU
The new standard I/O package seems to be incompatible with the
"script" command.  It buffers program output, making it impossible
to carry on a conversation with an interactive process.  On EUNICE
this has been fixed so that script files look like ttys to the
I/O routines and every line is flushed.

21-Jul-82  Laws at SRI-IU
BTW, what does "rc" mean?  Unix always uses rc files for
initialization, and no one seems to know the mnemonic.

26-Jul-82  Laws at SRI-IU
A "vfree" capability is needed for image processing work, as is
a contiguous storage mechanism.

26-Jul-82  Laws at SRI-IU
I-nodes should store additional bits indicating which names
are directories and which are shell scripts.  These should be
flagged by the ls command much as ls -F now flags directories.
Having the extra bits would speed up the ls -F command and
should speed up some shell actions as well.

26-Jul-82  Laws at SRI-IU
The find command should offer a "depth" limit so that one could
more easily specify an action to be performed on all of the
first-level children of a particular directory.  Also, it is
awkward that the action performed by -exec is done in the invoking
environment and not in the environment of each selected file.
(Perhaps both types of -exec are needed.)  I have tried passing
"(cd {}; <command>)" to a "find . -type d", but there is no way
to quote the semicolon without also hiding the {} so that find
can't substitute the directory name.

26-Jul-82  Laws at SRI-IU
The command "rm -f *.o foo.txt" will bomb it there is no .o file
available.  It would seem more logical for the command to bomb
(if at all) only when the entire argument list is null.  Another
place this causes trouble is with "cc -o tst tst.c *.o -I...",
which bombs if there is no .o file.  I don't even want to see a
complaint from the shell, much less have it skip the command.
(This is different from "set nonomatch" in that it would omit
the unsatisfied substitution instead of leaving it in the command
line.)

26-Jul-82  Laws at SRI-IU
The csh syntax {a,b,c} is inconsistent with the normal argument
syntax of "a b c".  This interferes with using the `` mechanism
within {} to generate lists of things for shell commands to operate
on.  (Personally, I would like to see the comma form made legal
as well as the standard space form.  See the next comment.)
It also makes it difficult to format a command script nicely by
breaking lines with an escaped newline (i.e. \
because no space is allowed to come between the comma and the
next entry.

26-Jul-82  Laws at SRI-IU
The shell argument-passing mechanism should be augmented so that
a null argument could be indicated using successive commas.  The
shell would then also need syntax for testing whether an argument
was missing (as opposed to null).  This would give the necessary
hook for writing shell scripts with default arguments.

26-Jul-82  Laws at SRI-IU
The -I/dir/include syntax in the cc command, and similar flags for
other programs, are awkward because the shell can't expand the
variable in -I$var.  This could be alleviated by allowing a space
following the -I flag in the manner of most other UNIX flags.

27-Jul-82  Laws at SRI-IU
Now that UNIX is becoming a user environment, it would be helpful
to have a "nomagic" switch for the csh as there is for ex.  (This
is different from "set noglob" in that expansions could still be
invoked by quoting the special symbols.)  I would particularly
like to turn off magic handling of ? and ?? since they are seldom
used as wildcards and would be very useful as query arguments
to interactive programs.  (I would also like to use ?> as an
abbreviation for " ? ? ? ? ...", which means that "nomagic"
would have to allow the ?> syntax.)

13-Aug-82  Laws at SRI-IU
The code for whatis.c is redundant with that in man.c.  The
whatis command could now be replaced by a shell script invoking
man -f the way that apropos invokes man -k.  (Alternatively, the
man options could be dropped and apropos and whatis could both
be made separate programs.)  BTW, the error message in man
misspells "appropriate" as "apropriate".

27-Aug-82  Laws at SRI-IU
The which command does not expand aliases.  This can be very
confusing when it reports that one version will be executed
but another actually is.

11-Sep-82  Laws at SRI-IU
The spell command does not accept a -x command as documented.
It passes the x on to deroff, which can't handle it.

27-Sep-82  Laws at SRI-IU
The apropos and man systems sometimes don't coordinate.
You cannot tell from the apropos lines for feof, fabs, or strlen
what name you should give to man to get the full details.

27-Sep-82  Laws at SRI-IU
There should be a command similar to whatis that gives the
synopsis line of a program.

04-Oct-82  Laws at SRI-IU
The shell usurps the () symbols to denote lists of commands.
While this is a valuable function, I would also like to see
arguments which can be lists of subarguments.  The only
mechanism currently available is to flag each argument type
and to detect the end of the list by locating the next flag.
Such parsing gets very tricky when the order of the major
arguments is not fixed.  It would be so much easier if the
shell accepted "command -s (size1 ...) -n (name1 ...)" and
either kept the subarguments intact in the argv list or
recursively parsed them in lists pointed at by the argv list.

04-Oct-82  Laws at SRI-IU
The other major capability I see lacking in the UNIX philosophy
is property lists.  I would like to be able to annotate any
object, particularly files and directories, with comments,
applicable handler routines, backup tape archive name, etc.
I would like to see a property list concept similar to that
in LISP developed.  It shouldn't be very hard to associate
some kind of .prop file with every current UNIX file type.

15-Oct-82  Laws at SRI-IU
If you set a shell variable to a null string, "set a =", and
then ask "echo $#a", you get 1 instead of the correct 0 length.
The command "set a = `alias foobar`" gives a correct length of 0
when no alias exists.

18-Oct-82  Laws at SRI-IU
Ctags gets confused by any line which starts on the left margin
and contains a parenthesis, even if that line is inside a comment.

20-Oct-82  Laws at SRI-IU
Redirecting the standard output of a process to a log file
works fine, but doing a cat on the file will show nothing
until enough output has been generated to produce a buffer
dump.  It would be nice if a log file could be given the same
I/O buffering as a tty.

21-Oct-82  Laws at SRI-IU
It looks like the man program may have a problem, although it
hasn't caused us trouble yet.  The "search" section of the
manual() subroutine in /usr/src/cmd/man/man.c appends various
letters to the command.section string in the "work"
vector.  It neglects to put a 0 (NULL) in the following slot, so
that the action of the "stat" command depends on what garbage
was in the buffer previously.

21-Oct-82  Laws at SRI-IU
The !* history mechanism is apparently quite useful for passing
an argument list into an alias, as in

    alias foo "bar1; bar2 \!*; bar3"

It seems, however, that !* is not documented in the csh man page.
This should be done.

11-Nov-82  Laws at SRI-IU
The shell should respond to a ^U rubout with a new prompt symbol,
at least on terminals that do a LF and not just a CR.

12-Nov-82  Laws at SRI-IU
The man facility really should use tbl and neqn when formatting
files so that we could include tables and equations.  Also, it
should be better documented somewhere (e.g., in the man page for
man itself) that the man macros are those in the -man package and
are documented in man(7).

18-Nov-82  Laws at SRI-IU
The practice of creating a "lock file" to prevent multiple access
to a particular operating system service (e.g., the printer) is
somewhat awkward.  It is sometimes possible to wedge a server
if you kill a process during the time that the lock file exists
since the operating system does not support named "temporary" files
that are deleted if the process dies.  Perhaps UNIX should support a more 
fundamental locking mechanism, e.g. an "unsharable" file protection
mode or I/O access mode which would prevent more than one user
having write access at once.

18-Nov-82  Laws at SRI-IU
Denying write access to a file is not particularly meaningful if
the user can move the file where no one will ever find it (e.g.
/tmp/.tmp) and replace it with a new file.  While this can be
prevented by manipulating permissions to the directory itself,
it might be worthwhile to modify the mv command (and the routines
it uses) to refuse to move a write-protected file.

27-Nov-82  Laws at SRI-IU
There should be a way of flagging .cshrc commands that are to apply
only to explicit shell invocations (e.g., via the csh command) as
opposed to those needed for both interactive and background
processes (e.g., shells sprouted by make).

29-Nov-82  Laws at SRI-IU
The history mechanism should be able to repeat an entire foreach
command, not just the first line.

29-Nov-82  Laws at SRI-IU
Evidently the Berkeley grep command takes a -y for case fold search
instead of the documented -i.  The documentation should be
upgraded.

30-Nov-82  Laws at SRI-IU
The use of the name line in each man page to generate keywords for the
apropos system is not optimal.  It forces the documentor to make absurd
entries like the "sh" name, which includes every built-in shell command,
or to omit valuable keywords as in the "csh" entry.  It discourages the
documentation of libraries as units, and encourages separate and redundant
documention of trivial little subroutines.  It leads to man pages such as
string(3) and floor(3m) where the name of the man page is difficult
to determine from the apropos line.  One solution would be to have a
separate (and optional) "INDEX" or "KEYWORD" entry in each man page in
which the documentor could store keywords to be added to those in the
name line.  Apropos would search both the KEYWORD and NAME fields, but
would only print the NAME field.

21-Dec-82  Laws at SRI-IU
The "make" system does not expand .cshrc aliases, and is unable
to execute an "alias" command.  To get around this, put in something
like "@csh -v -c "<aliased command>".

27-Jan-83  Laws at SRI-IU
Do not use a $shellvar as a library name in a cc command if the
set shellvar = "..." command (with quotes) has a \<Carriage Return>
in it.  The loader will complain about premature EOF.

31-Jan-83  Laws at SRI-IU
It is absurd (and a real pain) that ranlib must be run every time
a file is archived (or deleted!) or an archive is moved.  If this
kludge is really necessary, it should be built into ar, mv, and cp.

03-Feb-83  Laws at SRI-IU
The documentation of "news" omits the -s argument for sending
a file to the news directory.

06-Apr-83  Laws at SRI-IU
Normal use of the the make system's intelligence has a minor
bug:  If running make produces linker errors because a library
is missing in a compile command, and if you edit the makefile
to add the library name, the make system may be fooled into
saying that all its files are now up to date.  The problem is
that the makefile itself, rather than any of its inputs or
outputs, has changed, and this change makes some of its outputs
obsolete.  Possibly the make system should check the date of
the makefile as well as the dates of its associated files.
-------

Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP
Path: utzoo!linus!philabs!seismo!hao!hplabs!sri-unix!edhall@rand-unix
From: edhall@rand-u...@sri-unix.UUCP
Newsgroups: net.unix
Subject: Re: Unix Bugs and Suggestions
Message-ID: <4803@sri-arpa.UUCP>
Date: Thu, 1-Sep-83 16:58:00 EDT
Article-I.D.: sri-arpa.4803
Posted: Thu Sep  1 16:58:00 1983
Date-Received: Sun, 4-Sep-83 23:35:50 EDT
Lines: 24

At least half of your complaints concerned problems with CSH.
After two years working with and learning about that monstrosity
I finally have to vent some steam over it.

The C-shell hardly deserves to be called `UNIX'.  It has a wealth
of features, each one not quite fully implemented and each with
an arcane syntax which, if it is similar to that of other features,
is just different enough to thwart the user's intuitions.  It is
clearly an effort of several individuals, each with their own `idea'
of what it should be.

The Bourne shell may not have some of the features, but it is clean
and elegant.  Its facilities don't seem to be at war with each other.
I almost always use it for scripts, as it seems to be much more of
a *programming language*.  By comparison, C-shell is just a grab-bag
of hacks.  (Useful hacks, to be sure...)

Don't get me wrong; I *use* C-shell as my interactive shell.  History,
job-control, and aliasing are all productive features for me.  But
someone, somewhere, has to have done a better job with them.

		-Ed Hall
		edhall@rand-unix
		decvax!randvax!edhall