bash脚本中的主目录导航

时间:2014-09-25 15:23:30

标签: bash .bash-profile

我需要一个用于.bashrc文件的简单bash脚本函数来导航到我的主目录。 我们在目录中使用hg作为我们的所有工作目的,并包含许多流。

/home/<username>/RelStream1/
/home/<username>/RelStream2/
/home/<username>/RelStream3/
/home/<username>/RelStream4/

对于同名我称之为/ home // RelStream1 / path为repo home。

现在出于工作目的,我需要从我的repo主路径导航到子文件夹。 /home/<username>/RelStream1/pkgdir/appsdir/moduledir/submoduledir/.... 完成工作后,我需要回到home repo目录进行编译。 我已经添加了这样的别名,但仍然很难记住回来的路径。

    alias ..="cd .."
    alias ..2="cd ../.."
    alias ..3="cd ../../.."
    alias ..4="cd ../../../.."
    alias ..5="cd ../../../../.."

请注意,在任何时间点都会使用许多repo主目录,因此设置别名alias rhome='cd /home/<username>/RelStreamX/'几乎没用。

我只需要一个简单的bash函数来回到repo主目录(当前的repo)。 它必须获取当前路径并将我的目录导航回home repo目录

    Ex1:
    From: /home/<username>/RelStream1/pkgdir/appsdir/moduledir/submoduledir/
    To: /home/<username>/RelStream1/ 

    Ex2:
    From: /home/<username>/RelStream3/pkgdir/appsdir/moduledir/submoduledir/micromodule/
    To: /home/<username>/RelStream3/ 

    Ex3:
    From: /home/<username>/RelStream4/pkgdir/appsdir/
    To: /home/<username>/RelStream4/ 

我在bash(初学者)中尝试了一些方法,但没有给出预期的结果。

代码:

    repohome_func()
    {
    cwd=$(pwd)
    echo "CurrPath:${cwd}"
    sep="/"

    //My plan is to search the cur path with "/" char up to 4 times, 
    //cut the front string and then execute that cmd. 

    }alias rhome=repohome_func

4 个答案:

答案 0 :(得分:1)

这应该适合你:

function repohome() {
    local repodir=${PWD/$HOME\/}
    cd "$HOME/${repodir%%/*}"
}

答案 1 :(得分:0)

这应该是:

alias rhome="cd $(pwd | sed 's~/[^/]*~~4g')"

它获取pwd的当前路径,并将其替换为所需的路径。因为它在$()之内,所以我们cd

您需要删除除前三个块之外的所有当前路径。有了这个sed,我们就这样做了。

查看带文件的示例:

$ cat a
/home/myuser/myrepo1/asld/as/asdf/asdf/asdf
/home/myuser/myrepo2/asdf
/home/myuser/myrepo3/asld/as/asdf/f/asdf
/home/myuser/myrepo4/asld/as/asdf/
$ sed 's~/[^/]*~~4g' a
/home/myuser/myrepo1
/home/myuser/myrepo2
/home/myuser/myrepo3
/home/myuser/myrepo4

从下面评论的内容来看,似乎解决方案不是作为别名工作,而是作为一个功能。假设是cdpwdsed中必须有一些别名,这使得它们的工作方式不同。

由于函数绕过了别名,因此使用它来实现它。否则,它也可以在任何命令之前使用\,因此命令别名也会被绕过。

alias rhome="\cd $(\pwd | \sed 's~/[^/]*~~4g')"

更多信息:

答案 2 :(得分:0)

如果您将主目录添加到CDPATH的前面,例如

CDPATH=/home/<username>:.

然后将在当前工作目录之前的主目录中首先查找与cd一起使用的任何相对路径。然后

cd Relstream1

会在/home/<username>/Relstream1之前转到./Relstream1

答案 3 :(得分:0)

您可能想尝试内置命令pushdpopd。如果您使用pushd <dir>而不是cd <dir>,则可以使用popd返回上一个工作目录。