使用 CDPATH 和符号链接打开文件

使用 CDPATH 和符号链接打开文件

为了快速移动,我添加了一条 CDPATH 路径,其中包含指向不同位置的符号链接。我通过将以下行添加到 .bashrc 来做到这一点:

export CDPATH=~/symlinks

使用目录时,一切都很好,我可以从任何地方访问符号链接的文件夹。

例如,如果我这样做:

$ ln -s ~/path/to/folder ~/symlinks/folder

然后我可以写:

$ cd folder

进入符号链接文件夹,无论我当前的目录如何。

但是,当我创建一个文件的符号链接,然后尝试使用编辑器打开它时,我会得到一个空文件,除非我位于符号链接目录中。

例如,如果我这样做:

$ ln -s ~/path/to/file/filename ~/symlinks/filename

然后写:

$ kwrite filename

如果我不在符号链接文件夹中,我会得到一个空文件。

我想从任何地方访问该文件,我怎样才能实现这一点?

答案1

简单的答案是你不能。

CDPATH 的作用是,如果您输入“cd 文件夹”,它首先检查“文件夹”是否存在于您的 CDPATH 中;如果没有,它将检查您当前所在的文件夹。但这特定于目录更改; kwrite 不检查 CDPATH 并且 AFAIK 没有配置选项可以让它在任何特定目录中查找。

您可以做的是制作一个小 shell 脚本来替换 kwrite,如下所示:

#!/bin/sh

FILE=$1

if [ -f "$HOME/symlinks/$FILE" ] 
then
   kwrite "HOME/symlinks/$FILE"
else
   kwrite "$FILE"
fi

然后运行脚本(您可以将其命名为“akwrite”),而不是直接运行 kwrite。

答案2

你不能。

您可以做的是将快捷方式定义为 shell 变量。

fn=~/path/to/file/filename
kwrite $fn

在 zsh 中,您可以通过使用目录哈希来避免与 shell 变量发生名称冲突。这些是随后扩展的文件名的别名~(如用户名)。尽管有它们的名称,这些别名不必指向目录,它们可以扩展到任意文本。

hash -d fn=~/path/to/file/filename
kwrite ~fn

相关内容