我希望运行pwd
,如果内容包含“/ Volumes / Storage / Users / testuser /”,则重定向到〜/,然后是{{1的其他内容是的。例如,如果pwd返回:
pwd
这个bash脚本会进入:
/Volumes/Storage/Users/testuser/Desktop/folder1/folder2/
到目前为止,我有这个,但我似乎无法正确显示匹配组:
~/Desktop/folder1/folder2/
答案 0 :(得分:2)
不能引用代字号,否则cd
会看到文字~
字符。
cd ~/"${BASH_REMATCH[1]}"
你也不需要为了它的价值而逃避斜杠。
答案 1 :(得分:1)
你不应该逃避你的正则表达式中的斜杠。
此外,正如John Kugelman所提到的,~
在字符串中无法正常工作。
if [[ $(pwd) =~ /Volumes/Storage/Users/testuser/(.*) ]]; then
cd "$HOME/${BASH_REMATCH[1]}"
fi
答案 2 :(得分:1)
也许您对替代解决方案感兴趣。
我建议使用shell参数扩展以下内容。
PREFIX="/Volumes/Storage/Users/testuser/"
PWD=`pwd`
[[ ${PWD} =~ ${PREFIX}* ]] && cd ~/"${PWD#${PREFIX}}"
表单${PWD#${PREFIX}}
会在${PREFIX}
开头删除${PWD}
。
答案 3 :(得分:0)
你想做什么?
如果用户尝试cd
至/Volumes/Storage/Users/testuser/Desktop/folder1/folder2/
且其主目录为/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
。但是,这很容易添加。这应该足以让你去。
extglob
这在我的计算机上 。我有BASH,但我也设置了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
的情况下工作,但如果它没有添加这些行:
{{1}}