使用这回答,我在文件中创建了一个符号链接,.bashrc
以便更轻松地更改到常用目录。
例如
ln -s ~/a/b/c/d/development dev
我可以通过输入将目录从我的home
目录更改为目录。我也可以从我的目录进入,这也有效。development
cd dev
ls dev
home
然而,这些命令仅有的在我的目录中工作home
。如果我从其他地方输入它们,我会收到一条错误消息No such file or directory
。
如果我输入cd ~/dev
或者ls ~/dev
它有效。
~/
有人可以解释为什么会这样以及如何修复它,这样当我不在我的主目录中时就不必包含在路径中。
答案1
由于您使用 Bash 作为 shell,因此可以使用CDPATH
shell 变量。这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
。或者,在您的~/bashrc
or中定义一个变量~/.profile
:
dev="$HOME/dev"
您现在可以运行cd $dev
并被带到~/dev
。这可以通过多种方式实现,但链接不相关。