CD使用bash复赛和PWD结果

  • 本文关键字:PWD 结果 使用 bash CD bash
  • 更新时间 :
  • 英文 :


我希望运行pwd,如果内容包括"/Volumes/Storage/Users/testuser/",则重定向到~/,然后是pwd其余内容。例如,如果 pwd 返回:

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

这个 bash 脚本将 cd 成:

~/Desktop/folder1/folder2/

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

[[ $(pwd) =~ /Volumes/Storage/Users/testuser/(.*) ]] && cd "~/${BASH_REMATCH[1]}"

波浪号不能用引号引起来,否则cd会看到文字~字符。

cd ~/"${BASH_REMATCH[1]}"

你也不需要逃避斜杠,因为它的价值。

也许您对替代解决方案感兴趣。

我建议使用外壳参数扩展进行以下操作。

PREFIX="/Volumes/Storage/Users/testuser/"
PWD=`pwd`
[[ ${PWD} =~ ${PREFIX}* ]] && cd ~/"${PWD#${PREFIX}}"

表单${PWD#${PREFIX}}删除${PWD}开头的${PREFIX}

你不应该在你的正则表达式中

去掉斜杠。

此外,正如 John Kugelman 所提到的,~在字符串中无法正常工作。

if [[ $(pwd) =~ /Volumes/Storage/Users/testuser/(.*) ]]; then
    cd "$HOME/${BASH_REMATCH[1]}"
fi

你想做什么?

如果用户尝试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

最新更新