CD(1CSH) COMMAND REFERENCE CD(1CSH) NAME cd, chdir, pushd, popd, dirs - directory change commands (csh built-in) SYNOPSIS cd [ dirname ] or cd +n chdir [ dirname ] or chdir +n pushd [ dirname ] or pushd +n popd [ +n ] dirs DESCRIPTION Csh maintains the name current directory and a directory stack which can be used to keep up with all of the places the user has been and may wish to go back to. With this, the user does not have to remember where to go back to when sidetracked. The command cd, and its synonym chdir, change the current working directory of the shell. If no argument is given, the directory is changed to the user's home directory. If dirname begins with `/', `./', or `../', an attempt is made to change to that directory. Otherwise, the directory dirname is searched for in the current directory and in each element of the variable cdpath. If this fails, and there is a variable named the same as the value of dirname whose value begins with a `/', that directory is used (see EXAMPLES). When the directory is changed, the top element of the directory stack is replaced by the new directory. When the cdpath or directory name variable is used to change the directory, the path of the new current directory is printed. With the argument +n, where n is a number (beginning at 0), the n'th element of the directory stack is moved from that position to the top of the stack. The contents of the directory stack are always printed upon completion. The command pushd is used to add directory names to the directory stack, and to edit the stack, as well as change the current directory. With no arguments, pushd exchanges the top two elements of the directory stack. With a directory name argument, the directory is changed, and the name of the new current directory is pushed on to the stack. With the argument +n, where n is a number (beginning at 0), the n'th element of the directory stack is moved from that position to the top of the stack. The contents of the Printed 4/6/89 1
CD(1CSH) COMMAND REFERENCE CD(1CSH) directory stack is always printed upon completion. The command popd is used to remove elements from the directory stack. With no arguments, the top element of the stack is removed, resulting in changing the current working directory. With the argument +n, where n is a number (numbers begin at 0, but `+0' is not valid), the n'th element of the directory stack is removed. In the latter use, the current directory is unchanged. The contents of the directory stack is always printed upon completion. The command dirs prints the contents of the directory stack in order. The top element (which is the current directory) is printed first. The variable cdpath contains a list of directories to search if the directory name given is not a subdirectory of the current directory. This variable is maintained along with the environment variable CDPATH, which is used by the sh(1sh) cd command, but these variables are not the same. In csh, the current directory is implicitly the first element in cdpath, whereas in sh, the current directory must be given explicitly. In order to cope with this difference, the value of CDPATH is imported upon startup of a new shell. CDPATH is changed when cdpath is changed (using set(1csh) ), but cdpath is not changed when CDPATH is changed (using setenv(1csh) ). The variable cwd is set by csh whenever the current directory is changed. Due to symbolic links this variable may not always contain correct or desirable data. If the value of cwd is required to be correct, the variable hardpaths may be set, which causes all changes of directory to get the current directory path by calling getwd(3c), which will give the correct path. This makes directory changes somewhat slower. An alternate method is to use the command pwd(1) to get the correct current directory path when needed. EXAMPLES This example shows a use of the directory name variable. set default=/ set cdpath=( ~ ~/* ) cd default In this case, if there is no directory named `default' in the current directory, the user's home directory, and any subdirectories of the user's home directory, the current directory will become `/'. Printed 4/6/89 2
CD(1CSH) COMMAND REFERENCE CD(1CSH) The following example shows some of the features of manipulation of the directory stack. Here, the character `%' represents the csh prompt. % dirs ~ % pushd /bin /bin ~ % pushd /etc /etc /bin ~ % cd /usr % dirs /usr /bin ~ % pushd +2 ~ /usr /bin % popd +2 ~ /usr % popd /usr VARIABLES CDPATH The directory change search path. RETURN VALUE [NO_ERRS] Command completed without error. [1] An error of the type described in the error message occurred. CAVEATS Shell scripts should never change to a subdirectory and attempt to go back by executing cd .. , since the directory changed to may be a symbolic link to another directory whose parent directory is different from where the last cd was executed. At the very least, the cwd variable's value should be saved and used to go back. Popd cleans up (removes) bad directories in its stack; when popping to the next directory, it actually pops to the next valid directory, removing all nonexistent directories in-between from the stack. If all the directories on the stack are bad, including the curent one, popd tries to change directory to the user's HOME directory. If this also fails, it prints another error message and leaves the user in the bogus current directory. SEE ALSO @(1csh), alias(1csh), bg(1csh), break(1csh), cd(1sh), chdir(1sh), continue(1csh), csh(1csh), echo(1csh), eval(1csh), exec(1csh), exit(1csh), fg(1csh), glob(1csh), goto(1csh), hashstat(1csh), history(1csh), jobs(1csh), kill(1csh), limit(1csh), logout(1csh), nice(1csh), nohup(1csh), notify(1csh), onintr(1csh), rehash(1csh), Printed 4/6/89 3
CD(1CSH) COMMAND REFERENCE CD(1CSH) repeat(1csh), set(1csh), setenv(1csh), sh(1sh), shift(1csh), source(1csh), stop(1csh), suspend(1csh), time(1csh), umask(1csh), unhash(1csh), unalias(1csh), unlimit(1csh), unset(1csh), unsetenv(1csh), wait(1csh), which(1csh), and chdir(2). Printed 4/6/89 4
%%index%% na:264,158; sy:422,656; de:1078,2357;3771,2359; ex:6130,451;6917,473; va:7390,155; rv:7545,280; ca:7825,1121; se:8946,873;10155,637; %%index%%000000000166