- 论坛徽章:
- 0
|
set -o vi 失败
got time , read it .
quoted from article "UNIX shell differences and how to change your shell" ( author : Brian Blackmore, bnb@looking-glass.org ; Newsgroups: comp.unix.shell, comp.unix.questions ; Date: 13 Jul 1997 )
Shell features
This table below lists most features that I think would make you
choose one shell over another. It is not intended to be a definitive
list and does not include every single possible feature for every
single possible shell. A feature is only considered to be in a shell
if in the version that comes with the operating system, or if it is
available as compiled directly from the standard distribution. In
particular the C shell specified below is that available on SUNOS 4.*,
a considerable number of vendors now ship either tcsh or their own
enhanced C shell instead (they don't always make it obvious that they
are shipping tcsh.
sh csh ksh bash tcsh zsh rc es
Job control N Y Y Y Y Y N N
Aliases N Y Y Y Y Y N N
Shell functions Y(1) N Y Y N Y Y Y
"Sensible" Input/Output redirection Y N Y Y N Y Y Y
Directory stack N Y Y Y Y Y F F
Command history N Y Y Y Y Y L L
Command line editing N N Y Y Y Y L L
Vi Command line editing N N Y Y Y(3) Y L L
Emacs Command line editing N N Y Y Y Y L L
Rebindable Command line editing N N N Y Y Y L L
User name look up N Y Y Y Y Y L L
Login/Logout watching N N N N Y Y F F
Filename completion N Y(1) Y Y Y Y L L
Username completion N Y(2) Y Y Y Y L L
Hostname completion N Y(2) Y Y Y Y L L
History completion N N N Y Y Y L L
Fully programmable Completion N N N N Y Y N N
Mh Mailbox completion N N N N(4) N(6) N(6) N N
Co Processes N N Y N N Y N N
Builtin artithmetic evaluation N Y Y Y Y Y N N
Can follow symbolic links invisibly N N Y Y Y Y N N
Periodic command execution N N N N Y Y N N
Custom Prompt (easily) N N Y Y Y Y Y Y
Sun Keyboard Hack N N N N N Y N N
Spelling Correction N N N N Y Y N N
Process Substitution N N N Y(2) N Y Y Y
Underlying Syntax sh csh sh sh csh sh rc rc
Freely Available N N N(5) Y Y Y Y Y
Checks Mailbox N Y Y Y Y Y F F
Tty Sanity Checking N N N N Y Y N N
Can cope with large argument lists Y N Y Y Y Y Y Y
Has non-interactive startup file N Y Y(7) Y(7) Y Y N N
Has non-login startup file N Y Y(7) Y Y Y N N
Can avoid user startup files N Y N Y N Y Y Y
Can specify startup file N N Y Y N N N N
Low level command redefinition N N N N N N N Y
Has anonymous functions N N N N N N Y Y
List Variables N Y Y N Y Y Y Y
Full signal trap handling Y N Y Y N Y Y Y
File no clobber ability N Y Y Y Y Y N F
Local variables N N Y Y N Y Y Y
Lexically scoped variables N N N N N N N Y
Exceptions N N N N N N N Y
Key to the table above.
Y Feature can be done using this shell.
N Feature is not present in the shell.
F Feature can only be done by using the shells function
mechanism.
L The readline library must be linked into the shell to enable
this Feature.
Notes to the table above
1. This feature was not in the orginal version, but has since become
almost standard.
2. This feature is fairly new and so is often not found on many
versions of the shell, it is gradually making its way into
standard distribution.
3. The Vi emulation of this shell is thought by many to be
incomplete.
4. This feature is not standard but unoffical patches exist to
perform this.
5. A version called 'pdksh' is freely available, but does not have
the full functionality of the AT&T version.
6. This can be done via the shells programmable completion mechanism.
7. Only by specifing a file via the ENV environment variable.
How to change your shell
If you ever look at a UNIX manual page it will say that to change your
shell use chsh or passwd -s; unfortunately it often isn't as simple as
this, since it requires that your new shell is recognized as a valid
shell by the system and at present many systems do not recognize the
newer shells (the normal selection is, /bin/sh, /bin/csh and possibly
/bin/ksh). You are thus left with having to do some sort of fudge,
changing your effective login shell without changing your official
entry in /etc/passwd. You may also be left with the problem that there
isn't a compiled binary on your system , so you will have to get hold
of the shell's source and compile it yourself (Its generally best to
ask around to see if anyones done this already, since it isn't that
easy). Once done you should add in code to your old shells login file
so that it overlays your official login shell with your new shell
(remember to add the login flags to the command line, and with
csh/tcsh ensure that the overlay doesn't happen recursively since they
both read the same .login file).
The shell can be recognized as a valid shell if the system
administrator puts it in the file /etc/shells. If this file does not
exist, it must be created and should contain all valid shells
(i.e.don't forget the traditional ones in all their forms).
WARNING
If you do decide to change your shell you must be very careful - if
handled wrongly it can be almost impossible to correct, and will
almost certainly cause you a lot of hassle. Never make a new shell a
login shell until you have tested its new configuration files
thoroughly and then tested them once again. It is also important that
you make a full backup of your previous config files onto a floppy
disk (or a different host if you have a second account) if you have to
change any of them (which you will probably have to do if you can't
change your shell entry in /etc/passwd). You should also note that
your new shell is probably not supported by your system admin, so if
you have any problems you will probably have to look elsewhere. [/quote] |
|