我需要一个用于.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
答案 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
从下面评论的内容来看,似乎解决方案不是作为别名工作,而是作为一个功能。假设是cd
,pwd
或sed
中必须有一些别名,这使得它们的工作方式不同。
由于函数绕过了别名,因此使用它来实现它。否则,它也可以在任何命令之前使用\
,因此命令别名也会被绕过。
alias rhome="\cd $(\pwd | \sed 's~/[^/]*~~4g')"
更多信息:
答案 2 :(得分:0)
如果您将主目录添加到CDPATH
的前面,例如
CDPATH=/home/<username>:.
然后将在当前工作目录之前的主目录中首先查找与cd
一起使用的任何相对路径。然后
cd Relstream1
会在/home/<username>/Relstream1
之前转到./Relstream1
。
答案 3 :(得分:0)
您可能想尝试内置命令pushd
和popd
。如果您使用pushd <dir>
而不是cd <dir>
,则可以使用popd
返回上一个工作目录。