cd使用bash rematch和pwd的结果

时间:2013-07-26 16:23:37

标签: bash

我希望运行pwd,如果内容包含“/ Volumes / Storage / Users / testuser /”,则重定向到〜/,然后是{{1的其他内容是的。例如,如果pwd返回:

pwd

这个bash脚本会进入:

/Volumes/Storage/Users/testuser/Desktop/folder1/folder2/

到目前为止,我有这个,但我似乎无法正确显示匹配组:

~/Desktop/folder1/folder2/

4 个答案:

答案 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的目录。别名_cdcd并且您已全部设置。

如果您没有更改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}}