Working directory
Template:Short description Template:Use dmy dates Template:Use list-defined references In computing, the working directory is the directory of a file system to which a relative pathTemplate:Efn 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 (a relative path) refers to absolute path /home/user/data/foo.txt. System state for working directory often also applies in a graphical user interface (GUI), 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.<ref>Template:Cite book</ref>
Alternate names include current working directory (CWD)Template:Efn and just current directory.<ref name="SetCurrentDirectory"/>
Use
- Change directory
- Many shells provide a
cdcommand for setting the working directory. Some systems provide a command with a different name. For example, Template:Code is an alternate name for Template:Code in DOS/Windows.
- Report
- Commands for reporting the working directory vary more than setting it. Typically, a Unix shell provides the command
pwd(short for print working directory) that reports the absolute path to the working directory. The equivalent command in DOS/Windows iscdwithout arguments. Usingcdwithout 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<ref name="4DOS_8.00_HELP"/>
- Windows shortcut
- A Windows file shortcut can store the working directory.Template:Clarify
- Command-line prompt
- The working directory is displayed by the $P<ref group="nb" name="NB_PROMPT"/> token of the DOS
promptcommand.<ref name="Caldera_1998_USER"/> To keep the prompt short in a deep directory, the DR-DOS 7.07 COMMAND.COM supports a $W<ref group="nb" name="NB_PROMPT"/> token to display only the deepest subdirectory level. So, where a default PROMPT $P$G would result f.e. inC:\DOS>orC:\DOS\DRDOS>, a PROMPT $N:$W$G would instead yieldC:DOS>andC:DRDOS>, respectively. A similar facility (using $W and $w) was added to 4DOS as well.<ref name="4DOS_8.00_HELP"/>
- State for each DOS drive
- Template:AnchorUnder DOS, the absolute path to the working directory for each logical volume is stored as the current directory structure (CDS). It is allocated at boot time with a slot for each logical drive (or as defined by LASTDRIVE).<ref name="Schulman_1994_Undocumented-DOS"/><ref name="Paul_1997_NWDOSTIP"/><ref name="Brown_2000_RBIL"/> 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.<ref name="Schulman_1994_Undocumented-DOS"/>
- DOS Plus and older issues of DR DOS (up to DR DOS 6.0, with BDOS 6.7 in 1991) had no such limitation<ref name="Paul_1997_NWDOSTIP"/><ref name="Paul_1997_NWDOS7UN"/><ref name="4DOS_8.00_HELP"/> due to their implementations using DOS emulation on top of a Concurrent DOS- (and thus CP/M-86-)derived kernel, which internally organized subdirectories as relative links to parent directories instead of as absolute paths.<ref name="Paul_1997_NWDOSTIP"/><ref name="Paul_1997_NWDOS7UN"/> Since PalmDOS (with BDOS 7.0) and DR DOS 6.0 (1992 update with BDOS 7.1) and higher switched to use a CDS for maximum compatibility with DOS programs as well, they faced the same limitations as present in other DOSes.<ref name="Paul_1997_NWDOSTIP"/><ref name="Paul_1997_NWDOS7UN"/>
- High-level language access
- Most programming-language environments provide an application programming interface to the file system for getting and setting the working directory.
- The POSIX-defined function
chdir()(accessible via C and the many languages that interoperate with it) is a system call that changes the working directory.<ref name="OGBS"/> Its argument is a text string that is a path to the target directory, either absolute or relative to the existing value.
- Visual Basic provides the same functionality via a function with the same name.
- In Java, the working directory can be obtained via the
java.nio.file.Pathinterface, or thejava.io.Fileclass. The working directory cannot be changed.<ref name="Sun"/>
Examples
COMMAND.COM in DR-DOS 7.02 and higher provides ECHOS, a variant of the ECHO command that omits the terminating linefeed.<ref name="Caldera_1998_NEW703"/><ref name="4DOS_8.00_HELP"/> 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 (for "Batch").<ref name="CCI_1997_HELP"/> This modifies the output of commands to become suitable for direct command-line input (when redirecting it into a batch file) or usage as a parameter for other commands (using it as input for another command). 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.
See also
- Template:Annotated link
- Template:Annotated link
- Template:Annotated link
- Template:Annotated link
- Template:Annotated link
Notes
Template:Notelist Template:Reflist
References
Further reading
External links
- Working Directory (wd) at GithubTemplate:Spaced ndash a software package that tracks commonly used directories in a bash session