Obviously I know about pwd
and readlink
, but is there a command to find out the real absolute path to the current directory (ie, resolving links and dots)?
Asked
Active
Viewed 1,987 times
3

Jonathan H
- 2,373
-
Whats up with readlink ? – 123 May 27 '16 at 13:55
-
@123 Resolving links is sort of the point of the question – Jonathan H May 27 '16 at 13:57
3 Answers
5
pwd -P
(in any POSIX shell), is the command you're looking for.
-P
is for physical (as opposed to logical (-L
, the default) where pwd
mostly dumps the content of $PWD
(which the shell maintains based on the arguments you give to cd
or pushd
)).
$ ln -s . /tmp/here
$ cd /tmp/here/here
$ cd ../here/here
$ pwd
/tmp/here/here/here
$ pwd -P
/tmp

Stéphane Chazelas
- 544,893
1
Use
$ env pwd
Or
$ /bin/pwd
Unless the variable POSIXLY_CORRECT is set, in which case you need to add -P
.
The details:
The shell has a builtin called pwd
which defaults to printing the value of shell's $PWD
. In doing so, it may include logical paths (a default -L
).
If you call the builtin with (-P
) or use the external /bin/pwd
:
$ ln -s . /tmp/here; cd /tmp/here/here/here
$ pwd
/tmp/here/here/here
$ pwd -P
/tmp
$ /bin/pwd
/tmp
The reason is that the external /bin/pwd
defaults to the -P
option.
From info pwd
:
this implementation uses
-P' as the default unless the
POSIXLY_CORRECT' environment variable is set.
0
Using Python also works:
python -c "import os; print(os.path.realpath('.'))"

Jonathan H
- 2,373
-
Seems a little heavyweight to me to start a Python interpreter just to get the current path... – user May 27 '16 at 14:01
-
@MichaelKjörling :) Hence the question, but it turns out that RTFM was the answer to my question.. sorry about this! – Jonathan H May 27 '16 at 14:03
-
1
getcwd()
from any language should work, no need to resort torealpath
. The shell's interface togetcwd()
is thepwd
command, but by default, shells replace getcwd with a fancy version that tries to give some information on how you got there, hence the need for-P
there. Other languages don't have that problem, so you can use theirgetcwd()
there likeos.getcwd()
forpython
. – Stéphane Chazelas May 27 '16 at 14:05