将目录的快捷方式(软链接)添加到全局PATH,以便可以从任何地方访问它

shr*_*iek 1 bash ubuntu symlink path sh

我正在尝试将所有符号链接放在一个目录中(我将其称为该符号链接目录)。我已经导出了该目录的路径并将其放入我的.bashrc文件中。到的符号链接executable applications运行正常,但是我很难建立symlinks目录。这就是我尝试过的。

ln -s ~/mydir/ m 
Run Code Online (Sandbox Code Playgroud)

这里m应该是我的符号链接mydir的目录。

这仅在我位于symlinks目录中时有效。从该目录外部尝试cd m甚至m无法正常工作。我得到:-

bash: cd: m: No such file or directory
Run Code Online (Sandbox Code Playgroud)

好的,所以我认为也许PATH无法识别directory路径。所以我尝试创建一个bash脚本。

#!/bin/sh
cd ~/mydir/
Run Code Online (Sandbox Code Playgroud)

试过了,m... permission denied。好吧,我认为并做chmod +x m了那个文件。当我像那样运行该脚本时,m什么也没有。我试过了./m,还是没有。

我几乎迷失了要做如此简单的任务的决心。

Viv*_*vek 5

PATH 用于查找命令,我认为命令应该是文件或文件的符号链接。

因此,cd m它不起作用,因为这里的命令是“ cd”(不是m)。查找“ m”不会在PATH中发生。

只是m不起作用,因为在PATH中找到的“ m”是指向目录而不是文件的链接。您可以尝试创建另一个指向文件的“ m”,然后将其放在PATH的目录中,当您运行just时,它将被识别m

您创建的脚本可以正常工作,除了cd现在发生在新的shell中,并且在脚本末尾丢失了。您可以通过ls在脚本中将cd 放在后面来进行检查。

有几种方法可以实现您想要的。

一种选择是使用CDPATH变量。这是cd命令的搜索路径。检查man bash详细信息,但基本上,您所需要做的就是将symlinks目录添加到CDPATH。

export CDPATH=~/symlinks:$CDPATH
cd m   ## will cd to linked directory
Run Code Online (Sandbox Code Playgroud)

或者,您可以创建别名或函数,并将其放入.bashrc或其他源文件中。

alias m="cd ~/mydir"

m() {
    cd ~/mydir
}
Run Code Online (Sandbox Code Playgroud)

现在您可以输入mcd到mydir