linux bash - 我可以创建一个快捷方式(类似于 Windows)而不是符号链接吗?

linux bash - 我可以创建一个快捷方式(类似于 Windows)而不是符号链接吗?

假设我从这里开始:

/home/user1/$

我想创建一个快捷方式/tmp/subdir1/subdir2/here

通常我会创建一个符号链接:

/home/user1/$ ln -s /tmp/subdir1/subdir2/here here

然后我可以这样做:

/home/user1/$ cd here
/home/user1/here$

但在这种情况下我希望的结果是:

/home/user1/$ cd here
/tmp/subdir1/subdir2/here$   <--- path is now explicitly correct

并不是:

/home/user1/$ cd here
/home/user1/here$            <--- path is via sym link

那可能吗?

答案1

使用set -P

/home/user1/$ set -P
/home/user1/$ cd here
/tmp/subdir1/subdir2/here$   <--- path is now explicitly correct

(使用 撤消set +P)。


或者在调用时强制此行为cd

/home/user1/$ cd -P here
/tmp/subdir1/subdir2/here$   <--- path is now explicitly correct

或者在正常情况下更正您的工作目录cd

/home/user1/$ cd here
/home/user1/here$ cd `pwd -P`
/tmp/subdir1/subdir2/here$   <--- path is now explicitly correct

或者修改你的cd,所以当它被赋予一个文件,它从中读取目的地并按照你的意愿行事

cd(){ if [ -f "$1" ]; then command cd "`cat "$1"`"; else command cd "$@"; fi }

现在:

/home/user1/$ echo "/tmp/subdir1/subdir2/here" > there
/home/user1/$ cd there
/tmp/subdir1/subdir2/here$   <--- path is now explicitly correct

这是概念验证。请根据您的需要进行调整。一些拒绝二进制文件或大文件(错误给出)的逻辑可能是第一个合理的调整。

答案2

如果您只想要“cd”命令的快捷方式,您可以创建一个别名:

alias cd_here='cd /tmp/subdir1/subdir2/here'

你也可以做一个mount -o bind /dir/source /dir/dest

但是您在提示符中看到的将始终是 (ln way, mount way) /dir/dest。换句话说,源目录将被挂载到目标中,因此对于最终用户来说,目标目录将托管源目录的内容,这将变得透明(这是 Linux 上的目标)。

相关内容