你想做什么?
如果用户尝试到cd
并且/Volumes/Storage/Users/testuser/Desktop/folder1/folder2/
他们的 HOME 目录是/home/bob
,他们应该cd
改为/home/bob/Desktop/folder1/folder2
吗?
如果/home/bob/Desktop/folder1/folder2
不存在怎么办?
这是一个替换cd
为您正在 CD 的目录的函数。别名_cd
到cd
,你都准备好了。
如果您不使用cd
命令,则可以在其他 shell 脚本中完成相同的基本操作。
我正在使用${parameter#word}
语法来删除$BAD_DIR
前缀。我使用 glob 匹配来查看目录是否有错误目录作为前缀。
然后我HOME_DIR=~
用来设置我真正的 HOME 目录。我不知道如果用户$HOME
改变~
或不改变会发生什么。但是,这允许我在目录名称中使用引号。
我可能应该检查$PWD
以确保它们不在那里,并验证这是相对cd
还是给出完整路径的相对。但是,这很容易添加。这应该足以让您继续前进。
function _cd {
cd_to_dir="$1"
BAD_DIR="/Volumes/Storage/Users/testuser"
if [[ $cd_to_dir = $BAD_DIR* ]]
then
HOME_DIR=~
cd_to_dir="$HOME_DIR/${cd_to_dir#${BAD_DIR}}"
fi
\cd "$cd_to_dir"
}
alias cd=_cd
这适用于我的电脑。我有 BASH,但我也设置extglob
了一些其他的东西。这应该在没有extglob
设置的情况下工作,但如果它不添加这些行:
function _cd {
cd_to_dir="$1"
BAD_DIR="/Volumes/Storage/Users/testuser"
is_extglob_set=$(shopt -q extglob)
[ $is_extglob_set ] || shopt -s extglob
if [[ $cd_to_dir = $BAD_DIR* ]]
then
HOME_DIR=~
cd_to_dir="$HOME_DIR/${cd_to_dir#${BAD_DIR}}"
fi
[ $is_extglob_set ] || shopt -u extglob
\cd $cd_to_dir
}
alias cd=_cd