如何在导航时编辑路径的最高父目录

如何在导航时编辑路径的最高父目录

菜鸟问题:假设我在:

user@mj:~/var/www/html/mag/something/else/forever$ 

我希望:

user@mj:/var/www/html/mag/something/else/forever$ 

注意~

我可以通过以下方式实现该目标:

user@mj:~/var/www/html/mag/something/else/forever$ cd /var/www/html/mag/something/else/forever

有时路径很长,那么有没有办法从路径中截断头目录?就像一步一步跳转一样?

更新:为了不再输入整个路径。

答案1

嗯...你可以改成~这样/...

echo $(pwd | sed "s#^$HOME##")

(替换echocd移动)

如果你经常这样做,你可以给它起个别名,因为在 home 和 root 中有许多类似的路径

alias cdroot='cd $(pwd | sed "s#^$HOME##")'

添加到您的末尾~/.bashrc以便随时使用...

或者创建一个简单的 bash 函数(添加到~/.bashrc)来检查我们是否已进入~并从 root 切换到 home 并返回:

function cdroot() {
[[ $PWD =~ $HOME* ]] && cd $(pwd | sed "s#^$HOME##") ||
cd $(pwd | sed "s#^#$HOME#")
}

使用演示:

zanna@toaster:~/var/log/apt$ cdroot
zanna@toaster:/var/log/apt$ cdroot
zanna@toaster:~/var/log/apt$ 

答案2

作为 Zanna 所提出的替代方案,人们可​​以通过cd "${PWD##*$HOME}"修剪~部分来实现相同的行为。

这是一个演示:

$ mkdir -p var/lib
$ pwd
/home/xieerqi
$ cd var/lib
$ pwd
/home/xieerqi/var/lib
$ echo  ${PWD##*$HOME}                                             
/var/lib
$ cd  "${PWD##*$HOME}"                                             
$ pwd
/var/lib

这种方法可以与另一个参数替换相结合来检查变量是否为空,即我们在~文件夹中并~从所需路径中删除,因此变量为空,因此函数应该跳转到/

$ function trimcd(){ var="${PWD##*$HOME}" ; var=${var:-/} ; cd "$var";}        
$ pwd
/home/xieerqi
$ trimcd
$ pwd
/

通过添加一项,我们甚至可以在根目录和主目录之间切换:

$ function trimcd(){ var="${PWD##*$HOME}" ;[ "$var" = "/" ] && var="$HOME";var=${var:-/} ; cd "$var";}                                               
$ pwd  
/
$ trimcd
$ pwd
/home/xieerqi
$ trimcd
$ pwd
/
$ cd ~/var/lib
$ trimcd
$ pwd
/var/lib

相关内容