作为 bash 别名的路径只能在父目录中使用?

wey*_*ldt 4 shell bash alias

bash 别名可以是路径吗?

您好,对于菜鸟问题​​提前表示歉意。我注意到使用 bash 别名时出现奇怪的行为。

我的目标

的方法是为常用路径使用简短的 bash 别名,以使 shell 中的导航更加容易。作为示例,为了快速导航到uni安装在的数据驱动器上的 University () 文件夹,/mnt/data我使用了 bash 别名alias uni='/mnt/data/uni'。现在,如果我在父目录中/mnt/data并运行cd uni,这将像我想象的那样工作,并且我会移动到/mnt/data/uni.

问题

但是,如果我在另一个驱动器上,例如在我的根目录中,并且我运行相同的命令,则会收到错误bash: cd: uni: No such file or directory。如果我只执行uni,输出bash: /mnt/data/uni: Is a directory表明 bash “理解”这是一个目录。但由于某种原因,当不在父目录中时,别名无法与 cd 功能一起使用来移动到该目录。

如果我将该cd命令添加到我的别名中,使其读取为alias uni='cd /mnt/data/uni',则该别名适用于所有目录。但是我希望只有别名中的路径才能使用其他函数。现在我可以忍受将 包含cd到别名中,因为我对这些目录所做的 99% 的操作只是导航,但最让我烦恼的是我显然不完全理解别名在这种情况下如何工作。

我的问题

有人可以解释为什么我的别名会这样以及我在这里缺少什么吗?仅使用别名路径的解决方案也会很方便。

多谢!干杯

ter*_*don 5

不,别名不能是路径。或者,更准确地说,它们只能是通往可以执行的事物的路径。别名作为命令运行,因此alias uni=/bin/ls'可以工作,因为这是指向命令的路径。但是,alias uni=/mnt/data/uni它将不起作用,因为它uni是一个目录并且无法执行。

当您进入时它起作用的原因/mnt/data是因为您有一个名为 的子目录uni,因此cd uni只需移动到该目录即可。这里甚至没有调用别名。这根本不相关。shell 看到的只是一个命令 ( cd) 和一个目标(目录uni),别名功能根本没有被调用。

如果您想让目录像这样轻松访问,您可以将它们设置为变量。将其添加到您的~/.bashrc文件中:

uni="/mnt/data/uni"
Run Code Online (Sandbox Code Playgroud)

保存文件,打开一个新终端,您现在可以从任何地方cd "$uni"移动到/mnt/data/uni