Working directory


In computing, the working directory is the directory of a file system to which a relative path is relative.
In a command-line environment, a user often uses files in or relative to the working directory. The system state that identifies the working directory provides a convenient way to define the context of work. Users can use paths that are conceptually simpler and usually shorter, instead of always using absolute paths. For example, for working directory /home/user/data on a Unix-like system, the file name foo.txt refers to absolute path /home/user/data/foo.txt. System state for working directory often also applies in a graphical user interface, but often is not useful since the GUI environment maintains directory context in a different way.
As a feature, working directories vary by environment yet have some common, typical attributes. Typically, each process has a separate working directory, which allows users to have a different working directory for each shell running on the computer. Although common in systems that provide a hierarchical file system, the working directory feature is not required; for example, the DX10 operating system does not provide it, as all pathnames are either absolute or relative to the system volume.
Alternate names include current working directory and just current directory.

Use

; Change directory: Many shells provide a cd command for setting the working directory. Some systems provide a command with a different name. For example, is an alternate name for in DOS/Windows.
; Report: Commands for reporting the working directory vary more than setting it. Typically, a Unix shell provides the command pwd that reports the absolute path to the working directory. The equivalent command in DOS/Windows is cd without arguments. Using cd without arguments in Unix-like systems generally sets the working directory to the user's home directory.
; Scripting: To ease scripting development, some shells provide a variable that contains the working-directory path. Typically, a Unix-like shell provides an environment variable named PWD. Windows shells COMMAND.COM and cmd.exe provide a pseudo-environment variable named CD. Shells 4DOS, 4OS2, and 4NT provide _CWD, _CWDS, _CWP, and _CWPS
; Windows shortcut: A Windows file shortcut can store the working directory.
; Command-line prompt: The working directory is displayed by the $P token of the DOS prompt command. To keep the prompt short in a deep directory, the DR-DOS 7.07 COMMAND.COM supports a $W token to display only the deepest subdirectory level. So, where a default PROMPT $P$G would result f.e. in C:\DOS> or C:\DOS\DRDOS>, a PROMPT $N:$W$G would instead yield C:DOS> and C:DRDOS>, respectively. A similar facility was added to 4DOS as well.
; State for each DOS drive: Under DOS, the absolute path to the working directory for each logical volume is stored as the current directory structure. It is allocated at boot time with a slot for each logical drive. This structure imposes a length-limit of 66 characters on the full path of each working directory, and thus implicitly also limits the maximum possible depth of subdirectories.
; High-level language access: Most programming-language environments provide an application programming interface to the file system for getting and setting the working directory.

Examples

COMMAND.COM in DR-DOS 7.02 and higher provides ECHOS, a variant of the ECHO command that omits the terminating linefeed. This can be used to create a temporary batchjob storing the working directory in an environment variable like CD for later use. For example:
ECHOS SET CD=> SETCD.BAT
CHDIR >> SETCD.BAT
CALL SETCD.BAT
DEL SETCD.BAT
Alternatively, under Multiuser DOS and DR-DOS 7.02 and higher, various internal and external commands support a parameter /B. This modifies the output of commands to become suitable for direct command-line input or usage as a parameter for other commands. Where CHDIR would issue a directory path like C:\DOS, a command like CHDIR /B would issue CHDIR C:\DOS instead, so that CHDIR /B > RETDIR.BAT would create a temporary batchjob allowing returning to this directory later on.