好的,
我想在shell中执行以下操作。
如果我在css
之类的子目录中,它位于像mypage
这样的子目录中(例如projects/mypage/htdocs/css
),我想进入项目的根目录,即{ {1}}。我想把它作为一个函数写给我们作为一个命令。唯一的#34;固定"值为mypage
。
所以基本上如果我在shell的任何子项目中,我输入命令projects
(或其他),我希望函数检查它是否实际上在项目的子目录中,如果是,转到当前的子目录。
E.g。
goroot
这是否可能,如果是这样,我怎么能实现这个目标?
答案 0 :(得分:1)
假设我理解正确,这应该有效:
goroot() { cd $(sed -r 's#(~/projects/[^/]*)/.*#\1#' <<< $PWD); }
这个sed
命令有效地删除~/projects/SOMETHING
之后的所有内容,然后更改到该目录。如果您不在~/projects/
,那么它会将您留在当前目录中。
注意:这假设$PWD
使用~
表示家庭,如果它类似/home/user/
,则适当修改sed
命令。
答案 1 :(得分:1)
projroot=/home/user/projects
goroot() {
# Strip off project root prefix.
local m=${d#$projroot/}
if [ "$m" = "$d" ]; then
echo "Not in ~/projects"
return
fi
# Strip off project directory.
local suf=${m#*/}
if [ "$suf" = "$m" ]; then
echo "Already in project root."
return
fi
# cd to concatenation of project root, and project directory (stripped of sub-project path).
cd "$projroot/${m%/$suf}"
}