5.4 Shells
A shell is a system-supplied, character-oriented program that accepts commands and displays the results of those commands.
The commonly used shells included with Solaris are the Bourne Shell (called "sh"), the C-Shell (called "csh"), and the Korn Shell (called "ksh"). Table 5.1 compares the features of each shell.
Table 5.1 Shell Features Comparison
FEATURE |
BOURNE |
SHELL C-SHELL |
KORN SHELL |
Aliases |
Yes |
Yes |
Yes |
Command-line completion |
No |
Yes |
Yes |
Command history |
No |
Yes |
Yes |
Environment variables |
Yes |
Yes |
Yes |
Job control |
Yes |
Yes |
Yes |
Systemwide login initialization le |
/etc/prole |
/etc/login |
/etc/prole |
User login initialization le |
.prole |
.login |
.kshrc |
Shell execution initialization le |
.prole |
.cshrc |
.prole |
Initialization le order at login |
1. dtprole in home dir (if using CDE) 2. /etc/prole≈ 3. .prole in home dir |
1. .dtprole in home dir (if using CDE) 2. /etc/.login 3. .cshrc in home dir 4. .login in home dir |
1. .dtprole in home dir (if using CDE) 2. /etc/prole 3. .prole in home dir 4. .kshrc in home dir |
User logout le |
(none) |
.logout |
(none) |
Bourne Shell
The Bourne Shell is the default shell in the Solaris environment. Like the other shells, the Bourne Shell has a scripting language capability; its scripting language is probably the most popular in the UNIX world. It has no command history or command-line completion capabilities.
Initialization Files
The global initialization file, /etc/profile, is used to set environment variables for all Bourne Shell users. When a Bourne Shell user logs in, the user's shell executes /etc/profile first. Then, the user's own initialization file, .profile, is executed. The .profile file is located in the user's home directory.
The order of execution of Bourne Shell initialization files is:
.dtprofile in home directory (if user logs into a console using CDE)
/etc/profile
.profile in home directory
Environment Variables
Environment variables in Bourne Shell are defined using the VARIABLE=value; export VARIABLE syntax; an example follows:
$ TERM=xterm; export TERM $
Aliases
The Bourne Shell user can predefine a command alias. An example alias follows.
rm () { /usr/bin/rm -i $* }
In this example, the rm command is aliased so that the -i option (manually verify the removal of each file) is used.
C-Shell
The C-Shell has a somewhat richer feature set than the Bourne Shell, specifically in that it has command history and command-line editing capabilities. Although C-Shell has its own scripting language, its syntax is quite different from the Bourne and Korn Shells, and is consequently less popular.
Initialization Files
The global C-Shell initialization file, /etc/.login, defines environment variables for all C-Shell users on a system.
There are two user initialization files, .cshrc and .login. When a user logs in, both .cshrc and .login are executed. If, after logging in, the user starts another C-Shell, then just .cshrc is executed.
The order of execution of C Shell initialization files is:
.dtprofile in home directory (if user logs into a console using CDE)
/etc/.login
.cshrc in home directory
.login in home directory
When the C-Shell user logs out, the .logout file in the user's home directory is executed.
The user files .cshrc, .login, and .logout are all located in the user's home directory.
Environment Variables
C-Shell environment variables are set using the setenv VARIABLE value syntax; an example follows.
% setenv TERM xterm %
Aliases
C-Shell aliases are defined using the alias command. An example follows.
% alias rm "/usr/bin/rm -i \!*" %
In this example, the i option is always added whenever using the rm command.
Command History
The interactive C-Shell has a command history capability. The history command can be used to later recall these commands, and even to re-execute them without having to type them in again.
The history capability is deactivated by default; to permanently enable command history, put the set history command in your .login file.
Filename Completion
To use filename completion, the C-Shell variable filec must be set. To permanently enable filename completion, put the command set filec in your .login file.
Korn Shell
The Korn Shell is a superset of the Bourne Shell; that is, the Korn Shell has all of the Bourne Shell's features plus some of the built-in functions that the C-Shell is known for, including command-line completion and command history.
Initialization Files
The global initialization file, /etc/profile, is used to set environment variables for all Korn Shell users. When a Korn Shell user logs in, the user's shell executes /etc/profile. Next, the user's initialization file, .profile, is executed.
Many Korn Shell users also use a .kshrc file for Korn Shellspecific initialization commands. This capability exists so that Korn Shell users can use the Bourne Shell as needed. Login initialization for either Korn Shell or Bourne Shell can be placed in .profile, and Korn Shellonly commands placed in .kshrc.
To use .kshrc, the environment variable ENV must be set in the user's .profile (or in /etc/profile) as follows:
ENV=$HOME/.kshrc;export ENV
The user files .profile and .kshrc are located in the user's home directory.
The order of execution of Korn Shell initialization files is:
.dtprofile in home directory (if user logs into a console using CDE)
/etc/profile
.profile in home directory
.kshrc in home directory
Environment Variables
Korn Shell environment variables are set using the same syntax as that of the Bourne Shell: VARIABLE=value; export VARIABLE; an example follows.
$ TERM=xterm; export TERM
Aliases
Aliases are created using the alias name=command syntax. Our earlier example rm alias seen in the Bourne and C-Shells would be defined as follows:
alias rm="/usr/bin/rm -i $*"
The Korn Shell also supports Bourne Shell's function syntax.
Command-Line Editing
The Korn Shell uses a vi-like editing syntax that allows you to edit your command line while entering it. When you start entering a command, you are automatically placed in the vi "input mode." To enter command mode while on the command line, press ESC. You can then move about the command line using vi-like movement commands (left/right arrow, or the H or L keys), and enter input mode again by pressing ESC. If in command mode you press "v," the Korn Shell will start an actual vi session and give you full vi editing capabilities over your command line.
Command History
The Korn Shell keeps its command history in the file .sh_history, or in a different file as defined by the environment variable $HISTFILE. Up to 128 commands are stored there, unless the environment variable $HISTSIZE is set to a different value. The file .sh_history is assumed to be in the user's home directory.
Restricted Shells
A restricted shell is a shell with very limited capabilities that generally includes these features:
the cd (change directory) command is disallowed;
the $PATH environment variable cannot be changed;
commands containing pathnames beginning with "/" are disallowed; and
output cannot be redirected to a file (the use of > and >> in a command line is disallowed).
Restricted shells are available for circumstances that require a user to have a shell, but where the user's actions need to be more tightly controlled.
Two restricted shells are available: the restricted Bourne Shell and the restricted Korn Shell. The pathnames for these are /usr/bin/rksh and /usr/lib/rsh, respectively.
WARNING
The restricted shell ( /usr/lib/rsh) and the remote shell ( /usr/bin/rsh) are easily confused. Because both /usr/lib/rsh and /usr/bin/rsh are shells, substituting one for the other may give you functional results, although not the results you intended.