当我尝试在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