pushd [ -qsLP ] [ arg ]
pushd [ -qsLP ] old new
pushd [ -qsLP ] {+|-}n
       Change  the  current  directory, and push the old current directory
       onto the directory stack.  In the first form,  change  the  current
       directory  to  arg.   If arg is not specified, change to the second
       directory on the stack (that is, exchange the top two entries),  or
       change  to  $HOME if the PUSHD_TO_HOME option is set or if there is
       only one entry on the stack.  Otherwise, arg is interpreted  as  it
       would  be  by cd.  The meaning of old and new in the second form is
       also the same as for cd.

       The third form of pushd changes directory by rotating the directory
       list.  An argument of the form `+n' identifies  a  stack  entry  by
       counting  from  the  left  of  the  list shown by the dirs command,
       starting with zero.  An argument of the form `-n' counts  from  the
       right.   If  the PUSHD_MINUS option is set, the meanings of `+' and
       `-' in this context are swapped.

       If the -q (quiet) option is specified, the hook function chpwd  and
       the functions in the array $chpwd_functions are not called, and the
       new  directory  stack  is not printed.  This is useful for calls to
       pushd that do not change the environment  seen  by  an  interactive
       user.

       If the option -q is not specified and the shell option PUSHD_SILENT
       is  not  set,  the directory stack will be printed after a pushd is
       performed.

       The options -s, -L and -P have the same  meanings  as  for  the  cd
       builtin.
