Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Working directory
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
{{Short description|Attribute of a process}} {{Use dmy dates|date=July 2019|cs1-dates=y}} {{Use list-defined references|date=December 2021}} In [[computing]], the '''working directory''' of a [[process (computing)|process]] is a [[directory (file systems)|directory]] of a [[hierarchical file system]], if any,<ref group="nb" name="NB_DX10"/> dynamically associated with the process. It is sometimes called the '''current working directory (CWD)''', e.g. the [[BSD]] <kbd>getcwd</kbd><ref name="getcwd"/> function, or just '''current directory'''.<ref name="SetCurrentDirectory"/> When a process refers to a file using a [[path (computing)|path]] that is a [[relative path]], such as a path on a [[Unix-like]] system that does not begin with a <kbd>/</kbd> (forward slash) or a path on [[Windows]] that does not begin with a <kbd>\</kbd> (backward slash), the path is interpreted as relative to the process's working directory. So, for example a process on a Unix-like system with working directory <kbd>/rabbit-shoes</kbd> that attempts to create the file <kbd>foo.txt</kbd> will end up creating the file <kbd>/rabbit-shoes/foo.txt</kbd>. ==In operating systems== {{further|cd (command)|operating system shell}} In most computer file systems, every directory has an entry (usually named "<kbd>.</kbd>") which points to the directory itself. In most [[DOS]] and [[Unix|UNIX]] [[command-line interface|command shell]]s, as well as in the [[Microsoft Windows]] command line interpreters [[cmd.exe]] and [[Windows PowerShell]], the working directory can be changed by using the <kbd>[[CD (command)|CD]]</kbd> or <kbd>[[CHDIR (command)|CHDIR]]</kbd> [[command (computing)|command]]s. In [[Unix shell]]s, the <kbd>[[pwd]]</kbd> command outputs a full pathname of the working directory; the equivalent command in DOS and Windows is <kbd>CD</kbd> or <kbd>CHDIR</kbd> without [[parameter (computer science)|arguments]] (whereas in Unix, <kbd>cd</kbd> used without arguments takes the user back to their [[home directory]]). The [[environment variable]] <kbd>PWD</kbd> (in Unix/Linux shells), or the [[pseudo-environment variable]]s <kbd>[[CD (pseudo-environment variable)|CD]]</kbd> (in Windows [[COMMAND.COM]] and [[cmd.exe]], but not in OS/2 and DOS), or <kbd>_CWD</kbd>, <kbd>_CWDS</kbd>, <kbd>_CWP</kbd> and <kbd>_CWPS</kbd> (under [[4DOS]], [[4OS2]], [[4NT (shell)|4NT]] etc.)<ref name="4DOS_8.00_HELP"/> can be used in scripts, so that one need not start an external program. [[Microsoft Windows]] [[file shortcut]]s have the ability to store the working directory. COMMAND.COM in [[DR-DOS 7.02]] and higher provides <kbd>ECHOS</kbd>, a variant of the <kbd>[[ECHO (DOS command)|ECHO]]</kbd> command omitting 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 <kbd>CD</kbd> 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 <kbd>/B</kbd> (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 <kbd>CHDIR</kbd> would issue a directory path like <code>C:\DOS</code>, a command like <kbd>CHDIR /B</kbd> would issue <code>CHDIR C:\DOS</code> instead, so that <kbd>CHDIR /B > RETDIR.BAT</kbd> would create a temporary batchjob allowing to return to this directory later on. The working directory is also displayed by the <kbd>$P</kbd><ref group="nb" name="NB_PROMPT"/> token of the <code>[[PROMPT (DOS command)|PROMPT]]</code> command <ref name="Caldera_1998_USER"/> To keep the prompt short even inside of deep subdirectory structures, the DR-DOS 7.07 COMMAND.COM supports a <kbd>$W</kbd><ref group="nb" name="NB_PROMPT"/> token to display only the deepest subdirectory level. So, where a default <kbd>PROMPT $P$G</kbd> would result f.e. in <code>C:\DOS></code> or <code>C:\DOS\DRDOS></code>, a <kbd>PROMPT $N:$W$G</kbd> would instead yield <code>C:DOS></code> and <code>C:DRDOS></code>, respectively. A similar facility (using <kbd>$W</kbd> and <kbd>$w</kbd>) was added to [[4DOS]] as well.<ref name="4DOS_8.00_HELP"/> {{anchor|CDS}}Under DOS, the absolute paths of the working directories of all logical volumes are internally stored in an array-like data structure called the Current Directory Structure (CDS), which gets dynamically allocated at boot time to hold the necessary number of slots for all logical drives (or as defined by [[LASTDRIVE (CONFIG.SYS directive)|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 implementation using a [[PCMODE|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 [[bug compatibility|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"/> ==In programming languages== <!-- can become a separate article [[chdir]], if one is willing to split --> Most [[programming language]]s provide an [[application programming interface|interface]] to the [[file system]] functions of the operating system, including the ability to set (change) the working directory of the program. In the [[C language]], the [[POSIX]] function '''<code>chdir()</code>''' effects the [[system call]] which changes the working directory.<ref name="OGBS"/> Its argument is a [[string data type|text string]] with a path to the new directory, either absolute or relative to the old one. Where available, it can be called by a process to set its working directory. There are similar functions in other languages. For example, in [[Visual Basic]] it is usually spelled <code>CHDIR()</code>. In [[Java (programming language)|Java]], the working directory can be obtained through the <code>java.nio.file.Path</code> interface, or through the <code>java.io.File</code> class. The working directory cannot be changed.<ref name="Sun"/> ==See also== * [[Home directory]] * [[Root directory]] * [[Directory (computing)|Directory]] * [[chroot]] (Linux systems) * [[Load drive]] (a different, but related concept) * [[Long filename]] (LFN) ==Notes== {{reflist|group="nb"|refs= <ref group="nb" name="NB_DX10">There are [[operating system]]s that support a [[hierarchical file system]] but have no concept of "working directory"; for example [[Texas Instruments]]' [[DX10 operating system|DX10]], used for the [[TI-990]] series.</ref> <ref group="nb" name="NB_PROMPT">In the same way as <kbd>$O</kbd> works as alternative to <kbd>$P</kbd> under [[DR-DOS]] [[COMMAND.COM]], <kbd>$W</kbd> has an alias <kbd>$Y</kbd> except for that it gets suppressed on [[floppies]] in order to avoid [[critical error]] messages or delays when trying to retrieve the path of a non-inserted floppy.</ref> }} ==References== {{reflist|refs= <ref name="SetCurrentDirectory">{{cite web |title=Microsoft Windows – SetCurrentDirectory function |publisher=[[Microsoft]] |url=https://msdn.microsoft.com/de-de/library/windows/desktop/aa365530(v=vs.85).aspx |access-date=2017-05-27 |url-status=live |archive-url=https://web.archive.org/web/20180527133642/https://msdn.microsoft.com/de-de/library/windows/desktop/aa365530(v=vs.85).aspx |archive-date=2018-05-27}}</ref> <ref name="OGBS">{{cite web |title=The Open Group Base Specifications Issue 6 and IEEE Std 1003.1 |date=2004 |edition=Issue 6, 2004 |orig-year=2001 |publisher=The [[IEEE]] and [[The Open Group]] |url=http://www.opengroup.org/onlinepubs/009695399/functions/chdir.html |access-date=2018-05-27 |url-status=live |archive-url=https://web.archive.org/web/20180209195409/http://pubs.opengroup.org/onlinepubs/009695399/functions/chdir.html |archive-date=2018-02-09}}</ref> <ref name="Sun">{{cite web |title=JDK-4045688: Add chdir or equivalent notion of changing working directory |work=Bug Database |date=2008-08-18 |orig-year=1997-04-17 |publisher=[[Oracle Corporation|Oracle]] ([[Sun Microsystems]]) |url=http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4045688 |access-date=2011-02-20 |url-status=live |archive-url=https://web.archive.org/web/20171019003430/http://bugs.java.com/bugdatabase/view_bug.do?bug_id=4045688 |archive-date=2017-10-19}}</ref> <ref name="Caldera_1998_USER">{{cite book |title=Caldera DR-DOS 7.02 User Guide |publisher=[[Caldera, Inc.]] |date=1998 |orig-year=1993, 1997 |url=http://www.drdos.net/documentation/usergeng/uglontoc.htm |access-date=2013-08-10 |url-status=dead |archive-url=https://web.archive.org/web/20161104235434/http://www.drdos.net/documentation/usergeng/uglontoc.htm |archive-date=2016-11-04}}</ref> <ref name="CCI_1997_HELP">{{cite book |title=CCI Multiuser DOS 7.22 GOLD Online Documentation |id=HELP.HLP |date=1997-02-10 |publisher=[[Concurrent Controls, Inc.]] (CCI)}}</ref> <ref name="Caldera_1998_NEW703">{{cite book |title=DR-DOS 7.03 WHATSNEW.TXT — Changes from DR-DOS 7.02 to DR-DOS 7.03 |publisher=[[Caldera, Inc.]] |date=1998-12-24 |url=http://www.lookas.net/ftp/incoming/darbui/Justas/DRDOS/WHATSNEW.TXT |access-date=2019-04-08 |url-status=live |archive-url=https://web.archive.org/web/20190408142232/http://www.lookas.net/ftp/incoming/darbui/Justas/DRDOS/WHATSNEW.TXT |archive-date=2019-04-08}}</ref> <ref name="4DOS_8.00_HELP">{{cite book |title=4DOS 8.00 online help |title-link=4DOS 8.00 |author-first1=Hardin |author-last1=Brothers |author-first2=Tom |author-last2=Rawson |author-link2=Tom Rawson |author-first3=Rex C. |author-last3=Conn |author-link3=Rex C. Conn |author-first4=Matthias R. |author-last4=Paul |author-first5=Charles E. |author-last5=Dye |author-first6=Luchezar I. |author-last6=Georgiev |date=2002-02-27}}</ref> <ref name="Schulman_1994_Undocumented-DOS">{{cite book |author-first1=Andrew |author-last1=Schulman |author-first2=Ralf D. |author-last2=Brown |author-link2=Ralf D. Brown |author-first3=David |author-last3=Maxey |author-first4=Raymond J. |author-last4=Michels |author-first5=Jim |author-last5=Kyle |title=Undocumented DOS: A programmer's guide to reserved MS-DOS functions and data structures - expanded to include MS-DOS 6, Novell DOS and Windows 3.1 |publisher=[[Addison Wesley]] |edition=2 |date=1994 |orig-year=November 1993<!-- first printing --> |isbn=0-201-63287-X |id={{ISBN|978-0-201-63287-3}} |location=Reading, Massachusetts |url-access=registration |url=https://archive.org/details/undocumenteddosp00andr_0 }} (xviii+856+vi pages, 3.5-inch floppy) Errata: [https://web.archive.org/web/20190417215556/http://www.cs.cmu.edu/afs/cs/user/ralf/pub/books/UndocumentedDOS/errata.ud2][https://web.archive.org/web/20190417212906/https://www.pcjs.org/pubs/pc/programming/Undocumented_DOS/#errata-2nd-edition]</ref> <ref name="Paul_1997_NWDOSTIP">{{cite book |title=NWDOS-TIPs — Tips & Tricks rund um Novell DOS 7, mit Blick auf undokumentierte Details, Bugs und Workarounds |series=MPDOSTIP |author-first=Matthias R. |author-last=Paul |date=1997-07-30 |orig-year=1994-05-01 |edition=3 |language=de |url=http://www.antonis.de/dos/dos-tuts/mpdostip/html/nwdostip.htm |access-date=2014-08-06 |url-status=live |archive-url=https://web.archive.org/web/20170910194752/http://www.antonis.de/dos/dos-tuts/mpdostip/html/nwdostip.htm |archive-date=2017-09-10}} (NB. NWDOSTIP.TXT is a comprehensive work on Novell DOS 7 and OpenDOS 7.01, including the description of many undocumented features and internals. It is part of the author's yet larger <code>MPDOSTIP.ZIP</code><!-- still named TIPS_MP.ZIP between 1991 and 1996-11 --> collection maintained up to 2001 and distributed on many sites at the time. The provided link points to a HTML-converted older version of the <code>NWDOSTIP.TXT</code> file.) [https://web.archive.org/web/20190601152204/https://www.sac.sk/download/text/mpdostip.zip<!-- A yet older version 155 from 1997-05-13 of the 1997-07-15 distribution archive. -->]</ref> <ref name="Paul_1997_NWDOS7UN">{{cite book |title=NWDOS7UN.TXT — Zusammenfassung der dokumentierten und undokumentierten Fähigkeiten von Novell DOS 7 |series=MPDOSTIP |chapter=Chapter 1.3.xi: Überlange Pfade |author-first=Matthias R. |author-last=Paul |date=1997-06-07 |orig-year=April 1994 |language=de |url=http://www.antonis.de/dos/dos-tuts/mpdostip/html/nwdos7un.htm |access-date=2016-11-07 |url-status=live |archive-url=https://web.archive.org/web/20161107122352/http://www.antonis.de/dos/dos-tuts/mpdostip/html/nwdos7un.htm |archive-date=2016-11-07}}</ref> <ref name="Brown_2000_RBIL">{{cite web |title=Ralf Brown's Interrupt List |editor-first1=Ralf D. |editor-last1=Brown |editor-link1=Ralf D. Brown |display-editors=etal |edition=61 |id=[[INTER61]] |date=2000-07-16 |url=https://www.cs.cmu.edu/~ralf/files.html}}</ref> <ref name="getcwd">{{man|3|getcwd|FreeBSD||inline}}</ref> }} ==Further reading== * {{cite web |title=Why does each drive have its own current directory? |work=The New Old Thing |author-first=Raymond |author-last=Chen |author-link=Raymond Chen (Microsoft) |date=2010-10-11 |publisher=[[Microsoft]] |url=https://blogs.msdn.microsoft.com/oldnewthing/20101011-00/?p=12563/ |access-date=2017-05-27 |url-status=live |archive-url=https://web.archive.org/web/20160412192309/https://blogs.msdn.microsoft.com/oldnewthing/20101011-00/?p=12563/ |archive-date=2016-04-12}} * {{cite web |title=What are these strange =C: environment variables? |work=The New Old Thing |author-first=Raymond |author-last=Chen |author-link=Raymond Chen (Microsoft) |date=2010-05-06 |publisher=[[Microsoft]] |url=https://blogs.msdn.microsoft.com/oldnewthing/20100506-00/?p=14133/ |access-date=2017-05-27 |url-status=live |archive-url=https://web.archive.org/web/20180527163745/https://blogs.msdn.microsoft.com/oldnewthing/20100506-00/?p=14133/ |archive-date=2018-05-27}} ==External links== * [https://github.com/karlin/working-directory Working Directory (wd) at Github]{{spaced ndash}} a software package that tracks commonly used directories in a [[Bash (Unix shell)|bash]] session [[Category:File system directories]]
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)
Pages transcluded onto the current version of this page
(
help
)
:
Template:Anchor
(
edit
)
Template:Cite web
(
edit
)
Template:Further
(
edit
)
Template:Reflist
(
edit
)
Template:Short description
(
edit
)
Template:Spaced ndash
(
edit
)
Template:Use dmy dates
(
edit
)
Template:Use list-defined references
(
edit
)