假设我从这里开始:
/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 上的目标)。