如何find实际的工作目录?

当我尝试在linux命令提示符下(使用“pwd”)查找当前工作目录时,它将显示包含符号链接的目录。 例如,如果我创build一个符号链接并使用它来访问该目录:

ln -s /mnt/backup /home/biotech/backup cd /home/biotech/backup pwd 

这将显示“/ home / biotech / backup”而不是“/ mnt / backup”。 这发生在Ubuntu和Cygwin上。

我可以用什么命令来查看后者,“真正的”目录?

perheps:

 pwd -P 

从帮助:

“-P:打印的path名将不包含符号链接。”

 /bin/pwd 

它不知道你去过的地方,或者你到达那里的方式,所以从最初的原则出发。

要解决一般情况下(即不是当前目录)的这个问题,使用:

 readlink -f PATH 

从壳。

 pwd -P 

来自userland。

 /bin/pwd 

为了获得更便携的(POSIX-conformant) pwd -P命令,我们可以使用常规的内置shell command

 # cf. http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap01.html#tag_17_06 command -p pwd -P #builtin command -p pwd -P #alias pwd=echo; PATH="$(command -p getconf PATH)" 'pwd' -P 

在Windows7中,我使用CMD与许多NTFS硬连接到文件夹,cygwin,bash和perl在我的path,但pwd -P不工作如上所述。 这个脚本走到树上,取消链接到realdir:

 CHN=$(cygpath -wam .) echo $CHN while true ;do OLD=$DIR DIR=$(cygpath -wam .) if [[ ( -n "$OLD" ) && !( $OLD =~ $DIR* )]] ;then SYM=$DIR/${OLD##*/} CHN=$(echo $CHN | perl -lpe "s,$OLD,$SYM,") echo $CHN fi case $DIR in [AZ]:/ | [AZ]:/cyg* ) break ;; esac # TOPLEVEL cd $DIR/.. done