给定的
realpath)bash 4+ (甚至在OSX上)是
"$PWD" == "$(realpath .)"一直都是真的?
发布于 2014-08-09 22:18:18
这是相当容易的测试,这并不总是如此。
$ mkdir /tmp/realdir
$ cd /tmp/realdir
$ echo $PWD
/tmp/realdir
$ ln -s realdir /tmp/fakedir
$ cd /tmp/fakedir
$ echo $PWD
/tmp/fakedir
$ realpath .
/tmp/realdir所以不,$PWD和$(realpath .)并不总是一样的。
巴什手册表示PWD变量是由内置cd命令设置的。默认的镉的行为是:
符号链接在默认情况下或带有-L选项
这意味着,如果您cd到一个符号链接,变量得到解析相对于符号链接,而不是相对于物理路径。可以使用cd选项更改-P命令的此行为。这将导致它报告PWD变量中的物理目录:
$ cd -P /tmp/fakedir
$ echo $PWD
/tmp/realdir可以使用-P选项更改bash的默认行为:
$ set -P
$ cd /tmp/fakedir
$ echo $PWD
/tmp/realdir
$ set +P
$ cd /tmp/fakedir
$ echo $PWD
/tmp/fakedir当然,尽管您可以在执行一个PWD变量之后将任何您想要的东西赋值给cd,但是它得到了这个值:
$ cd /tmp/fakedir
$ PWD=/i/love/cake
$ echo $PWD
/i/love/cake但这并不是你想要的。
发布于 2014-08-11 01:08:56
即使没有使用符号链接,用户也没有设置PWD,情况也不一定如此:
vinc17@xvii:~$ mkdir my_dir
vinc17@xvii:~$ cd my_dir
vinc17@xvii:~/my_dir$ rmdir ../my_dir
vinc17@xvii:~/my_dir$ echo $PWD
/home/vinc17/my_dir
vinc17@xvii:~/my_dir$ realpath .
.: No such file or directory请注意,在zsh下,${${:-.}:A}仍然给出了与$PWD相同的答案( zshexpn(1)手册页提到了A修饰符:“注意,即使文件或中间的目录不存在,也会发生转换。”
但是,请注意,$PWD包含过时的信息。如果其他进程可以删除目录,那么使用它可能是个坏主意。考虑以下脚本:
rm -rf my_dir
mkdir my_dir
cd my_dir
echo 1 > file
cat $PWD/file
rm -r ../my_dir
mkdir ../my_dir
echo 2 > ../my_dir/file
cat ./file
cat $PWD/file
rm -r ../my_dir它将输出:
1
cat: ./file: No such file or directory
2也就是说,$PWD/file发生了变化。
https://stackoverflow.com/questions/25223466
复制相似问题