Yash: yet another shell
http://yash.osdn.jp/
=======================


Yash is a command line shell that conforms to the POSIX.1 standard
(IEEE Std 1003.1, 2008 Edition) for the most part. Actually, it is
much more POSIX-compliant than other shell like bash and zsh.

Yash also has its own features beyond POSIX, such as:
  * global aliases
  * random numbers
  * socket redirections and other special redirections
  * right prompt
  * command completion


Yash is free software distributed under the terms of GNU General
Public License (GPL) version 2. You can copy, modify, use, and/or
distribute this software as long as you obey the terms of GPL, but
note that there is NO WARRANTY. See the "COPYING" file for the full
text of GPL.

See the "INSTALL" file to see how to build and install yash.


===== Implementation Notes =====

 * In C, a null character represents the end of a string. If input to
   the shell itself contains a null character, characters following
   the null character will be ignored.
 * We assume that an overflow in signed integer arithmetic or type
   conversion silently yields an implementation-defined integer value
   rather than resulting in an error.
 * The GCC extension keyword `__attribute__' is used in the source
   code. When not compiled with GCC, this keyword is removed by the
   preprocessor, so generally there is no harm. But if your compiler
   uses this keyword for any other purpose, compilation may fail.
   Additionally, some other identifiers starting with '_' may cause
   compilation errors on some rare environments.
 * Some signals are assumed to have the specific numbers:
     SIGHUP=1 SIGINT=2 SIGQUIT=3 SIGABRT=6
     SIGKILL=9 SIGALRM=14 SIGTERM=15
 * POSIX disallows non-interactive shells to ignore or catch SIGTTIN,
   SIGTTOU, and SIGTSTP by default. Yash, however, ignores these
   signals if job-control is enabled, even if non-interactive.
 * File permission flags are assumed to have the specific values:
     0400=user read    0200=user write   0100=user execute
     0040=group read   0020=group write  0010=group execute
     0004=other read   0002=other write  0001=other execute
 * The character categorization in locales other than the POSIX locale
   is assumed upward compatible with the POSIX locale.
 * When the -e (-o errexit) option is set, failure of the last command
   of an and/or list makes the shell exit. This behavior is not
   strictly POSIX-compliant, but most existing shells behave this way.
 * The -o nolog option is not supported: it is silently ignored.
 * According to POSIX, the value of variable `PS1' is subject to
   parameter expansion. Yash performs command substitution and
   arithmetic expansion as well on the `PS1' value.
 * According to POSIX, the command `printf %c foo' should print the
   first byte of string `foo'. Yash prints the first character of
   `foo', which may be more than one byte.
 * The "break", "continue", and "return" built-ins, if executed in a
   trap, can operate only on a function, script, or loop that has been
   executed within the trap. This limitation is not strictly POSIX-
   compliant, but needed for consistent and predictable behavior of
   the shell.


======================
Magicant <magicant@users.osdn.me>

Comments, suggestions, and bug reports are welcome.
