更改目录的符号链接仅适用于主目录

更改目录的符号链接仅适用于主目录

使用回答,我在文件中创建了一个符号链接,.bashrc以便更轻松地更改到常用目录。

例如

ln -s ~/a/b/c/d/development dev

我可以通过输入将目录从我的home目录更改为目录。我也可以从我的目录进入,这也有效。developmentcd devls devhome

然而,这些命令仅有的在我的目录中工作home。如果我从其他地方输入它们,我会收到一条错误消息No such file or directory

如果我输入cd ~/dev或者ls ~/dev它有效。

~/有人可以解释为什么会这样以及如何修复它,这样当我不在我的主目录中时就不必包含在路径中。

答案1

由于您使用 Bash 作为 shell,因此可以使用CDPATHshell 变量。这bash手册将其描述为

搜索路径:在 CDPATH 中的每个目录名中搜索目录,并在 CDPATH 中用冒号(':')分隔备用目录名

您可以将以下行添加到您的.bashrc

CDPATH=".:$HOME"

如果您稍后键入cd dev,将在当前工作目录中搜索名为 的子目录dev

  • 如果这样的目录存在,它将更改为该目录(正如cd内置命令通常起作用的那样)。
  • 如果没有,它将搜索您的主目录 ( ~),找到符号链接(意识到它是目录的链接)并更改为目标目录(由 指向~/dev)。

如果您想优先选择主目录中的目录,您可以在( )$HOME中首先列出,但我强烈建议您不要这样做,因为它会破坏CDPATH"$HOME:."最小意外原则:结果行为与标准相差太大。

答案2

你不能。你怎么能?该ln命令创建一个文件,该文件是另一个文件(或目录,或其他文件)的链接。然后您可以像使用原始链接一样使用该链接。但这仍然只是一个文件。它有一个特定的路径,它不仅仅是神奇地浮动并且可以从文件系统中的任何地方访问。就像任何其他文件一样,您不能简单地按名称调用它,您需要使用它的路径。

就像创建常规文件一样:

$ cd ~/foo
$ touch file
$ cd ~/
$ ls file
ls: cannot access 'file': No such file or directory
$ ls ~/foo/file
file

链接没有什么不同。您不能仅从cd dev随机目录中执行 cd 并期望它能够工作,就像您不能cat file在随机目录中执行 cd 并期望系统神奇地知道您想要什么文件一样。

您可以使用脚本或函数(但不能使用链接)来获得所需的行为。例如,将这些行添加到 shell 的初始化文件中(~/.bashrc对于 bash):

dev(){
    cd "$HOME"/dev
}

要不就:

alias dev='cd ~/dev'

现在,跑步dev将带你到~/dev。或者,在您的~/bashrcor中定义一个变量~/.profile

dev="$HOME/dev"

您现在可以运行cd $dev并被带到~/dev。这可以通过多种方式实现,但链接不相关。

相关内容