[ prev | next | top ]

## 16. Shell Parameters

The shell has many predefined parameters that may be accessed. Here are some examples:

    % sleep 10 &
    [1] 3820
    % echo $!
    3820
    % set a b c
    % echo $#
    3
    % echo $ARGC
    3
    % ( exit 20 ) ; echo $?
    20
    % false; echo $status
    1

(`$?` and `$status` are equivalent.)

    % echo $HOST $HOSTTYPE
    dendrite sun4
    % echo $UID $GID
    701 60
    % cd /tmp
    % cd /home
    % echo $PWD $OLDPWD
    /home /tmp
    % ls $OLDPWD/.getwd
    /tmp/.getwd

˜+ and `˜-` are short for `$PWD` and `$OLDPWD`, respectively.

    % ls ˜-/.getwd
    /tmp/.getwd
    % ls -d ˜+/learning
    /home/learning
    % echo $RANDOM
    4880
    % echo $RANDOM
    11785
    % echo $RANDOM
    2062
    % echo $TTY
    /dev/ttyp4
    % echo $VERSION
    zsh v2.00.03
    % echo $USERNAME
    pf

The `cdpath` variable sets the search path for the `cd` command. If you do not specify `.` somewhere in the path, it is assumed to be the first component.

    % cdpath=( /usr ˜ ˜/zsh )
    % ls /usr
    5bin         dict         lang         net          sccs         sys
    5include     etc          lector       nserve       services     tmp
    5lib         export       lib          oed          share        ucb
    adm          games        local        old          skel         ucbinclude
    bin          geac         lost+found   openwin      spool        ucblib
    boot         hosts        macsyma_417  pat          src          xpg2bin
    demo         include      man          princeton    stand        xpg2include
    diag         kvm          mdec         pub          swap         xpg2lib
    % cd spool
    /usr/spool
    % cd bin
    /usr/bin
    % cd func
    ˜/func
    % cd
    % cd pub
    % pwd
    /u/pfalstad/pub
    % ls -d /usr/pub
    /usr/pub

PATH and path both set the search path for commands. These two variables are equivalent, except that one is a string and one is an array. If the user modifies PATH, the shell changes path as well, and vice versa.

    % PATH=/bin:/usr/bin:/tmp:.
    % echo $path
    /bin /usr/bin /tmp .
    % path=( /usr/bin . /usr/local/bin /usr/ucb )
    % echo $PATH
    /usr/bin:.:/usr/local/bin:/usr/ucb

The same is true of CDPATH and cdpath:

    % echo $CDPATH
    /usr:/u/pfalstad:/u/pfalstad/zsh
    % CDPATH=/u/subbarao:/usr/src:/tmp
    % echo $cdpath
    /u/subbarao /usr/src /tmp

In general, predefined parameters with names in all lowercase are arrays; assignments to them take the form:

name`=(` elem ... `)`

Predefined parameters with names in all uppercase are strings. If there is both an array and a string version of the same parameter, the string version is a colon-separated list, like PATH. You can use

    % typeset -T FOO foo

to create more of these yourself.

    % foo=( a b c )
    % echo $FOO
    a:b:c

HISTFILE is the name of the history file, where the history is saved when a shell exits.

    % zsh
    phoenix% HISTFILE=/tmp/history
    phoenix% SAVEHIST=20
    phoenix% echo foo
    foo
    phoenix% date
    Fri May 24 05:39:35 EDT 1991
    phoenix% uptime
      5:39am  up 4 days, 20:02,  40 users,  load average: 2.30, 2.20, 2.00
    phoenix% exit
    % cat /tmp/history
    HISTFILE=/tmp/history
    SAVEHIST=20
    echo foo
    date
    uptime
    exit
    % HISTSIZE=3
    % history
       28  rm /tmp/history
       29  HISTSIZE=3
       30  history

If you have several instances of zsh running at the same time, like when using the X window system, it might be preferable to append the history of each shell to a file when a shell exits instead of overwriting the old contents of the file. You can get this behaviour by setting the APPENDHISTORY option.

In zsh, if you say

    % >file

the command `cat` is normally assumed:

    % >file
    foo!
    ˆD
    % cat file
    foo!

Thus, you can view a file simply by typing:

    % <file
    foo!

However, this is not csh or sh compatible. To correct this, change the value of the parameter NULLCMD, which is `cat` by default.

    % NULLCMD=:
    % >file
    % ls -l file
    -rw-r--r--  1 pfalstad        0 May 24 05:41 file

If `NULLCMD` is unset, the shell reports an error if no command is specified (like csh).

    % unset NULLCMD
    % >file
    zsh: redirection with no command

Actually, READNULLCMD is used whenever you have a null command reading input from a single file. Thus, you can set READNULLCMD to `more` or `less` rather than `cat`. Also, if you set NULLCMD to `:` for sh compatibility, you can still read files with `< file` if you leave READNULLCMD set to `more`.

[ prev | next | top ]