菜鸟问题:假设我在:
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##")
(替换echo
为cd
移动)
如果你经常这样做,你可以给它起个别名,因为在 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