使所有命令遵守符号链接目录层次结构

使所有命令遵守符号链接目录层次结构

至少在 bash 中,默认情况下set +P会设置该选项,这使得某些命令(例如cdpwd和制表符补全)遵循符号链接层次结构,而不是物理层次结构。但是,许多其他命令(例如ls)仅遵循物理层次结构。

您可以set -P让所有命令都遵循物理目录结构(或将其添加到文件~/.inputrc中以在会话之间持久化)。但是,如果我想反过来,让所有(大多数?)命令都遵循符号目录结构,该怎么办?可以这样做吗?这是 bash 特有的吗?或者,有没有办法让事情相信符号目录物理?需要说明的是,我正在寻找一种可以影响所有潜在功能行为的设置,而不是像 这样的变通方法readlink。我能找到的最接近的方法是这个解决方法

有关如何获得不愉快结果的示例,请继续阅读。这可能会导致令人困惑的行为,因为您可以通过 Tab 键完成正在运行的命令无法找到的文件/文件夹。例如(您可能必须set +P先执行):

mkdir symtest1
mkdir symtest1/subdir
ln -s symtest1/subdir
touch youreinthebasedir         #a lovely file to show where you're looking
touch symtest1/youreinsymtest1  #yet another
pwd                             #shows where you are
cd subdir
pwd                             #should show the same plus "/subdir"
ls ../                          #should show the contents of "symtest1"

现在,使用制表符补全输入以下内容,
ls ../youretab
它将完成,
../youreinthebasedir
但是按回车键,您会收到一条错误,提示由于上述差异该文件不存在。

可以找到一些更有用的讨论这里这里

相关内容