我使用Ubuntu和我厌倦了这个长的提示在bash当我使用一些深层目录层次结构。所以,我想调整我的PS1缩短工作目录部分如下:
目前我有:
pajton@dragon:~/workspace/projects/project1/folder1/test$
并希望有:
pajton@dragon:~/workspace/.../folder1/test$
如果len($ PWD)超过给定阈值,则会发生截断。我想始终保留第一个路径组件和至少一个最后一个路径组件。然后当空间允许时,从右边添加更多的组件。
这是我目前的。它工作,但是:1)不保留第一路径分量,2)不尊重切割路径在边界:
pwd_length=14 pwd_symbol="..." newPWD="${PWD/#$HOME/~}" if [ $(echo -n $newPWD | wc -c | tr -d " ") -gt $pwd_length ] then newPWD="...$(echo -n $PWD | sed -e "s/.*\(.\{$pwd_length\}\)/\1/")" else newPWD="$(echo -n $PWD)" fi
结果:
pajton@dragon:...sth/folder1/sample$
提前致谢!
考虑这个脚本使用awk而不是sed为你的情况:
pwd_length=14 pwd_symbol="..." newPWD="${PWD/#$HOME/~}" if [ $(echo -n $newPWD | wc -c | tr -d " ") -gt $pwd_length ] then newPWD=$(echo -n $newPWD | awk -F '/' '{ print $1 "/" $2 "/.../" $(NF-1) "/" $(NF)}') fi PS1='${newPWD}$ '
对于你的目录〜/ workspace / projects / project1 / folder1 / test的例子,它使PS1为:〜/ workspace /…/ folder1 / test
更新
以上解决方案将设置您的提示,但正如你在注释中指出,它将不会改变PS1动态更改目录。所以这里的解决方案将动态设置PS1时,你改变目录。
将这两行放在.bashrc文件中:
export MYPS='$(echo -n "${PWD/#$HOME/~}" | awk -F "/" '"'"'{ if (length($0) > 14) { if (NF>4) print $1 "/" $2 "/.../" $(NF-1) "/" $NF; else if (NF>3) print $1 "/" $2 "/.../" $NF; else print $1 "/.../" $NF; } else print $0;}'"'"')' PS1='$(eval "echo ${MYPS}")$ '
如果awk中的(NF> 4&&< length($ 0)> 14)条件将仅在当前目录超过3个目录深度并且如果$ PWD的长度大于14个字符时应用特殊处理,将PS1保持为$ PWD。
例如:如果当前目录是〜/ workspace / projects / project1 $,那么PS1将是〜/ workspace / projects / project1 $
以上在.bashrc中的效果将如下在你的PS1上:
~$ cd ~/workspace/projects/project1/folder1/test ~/workspace/.../folder1/test$ cd .. ~/workspace/.../project1/folder1$ cd .. ~/workspace/.../project1$ cd .. ~/.../projects$ cd .. ~/workspace$ cd .. ~$
注意当我改变目录时,提示如何改变。让我知道,如果这不是你想要的。