Bash:自定义PS1与nice工作目录路径
我使用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 .. ~$ 注意当我改变目录时,提示如何改变。让我知道,如果这不是你想要的。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |