修剪终端命令提示符工作目录

修剪终端命令提示符工作目录

在深层文件夹结构中使用终端时,提示符有时会占据大部分行。有什么方法可以修剪工作目录吗?我知道我可以

PS1="\W >"

仅打印当前目录而不打印完整路径,但是有没有办法实现如下功能:

/home/smauel/de...ther/folder >

答案1

如果您使用的是 bash4(Ubuntu 9.10 及更新版本有 bash4),最简单的选项就是设置 PROMPT_DIRTRIM 变量。例如:

PROMPT_DIRTRIM=2

对于类似于 João Pinto 的示例(它将在旧版 bash 中工作并确保路径部分不超过 30 个字符),您可以执行以下操作:

PS1='[\u@\h:$(p=${PWD/#"$HOME"/~};((${#p}>30))&&echo "${p::10}…${p:(-19)}"||echo "\w")]\$ '

答案2

创建一个小型的 Python 脚本来实现所需的修剪逻辑。

例子:~/.short.pwd.py

import os
from socket import gethostname
hostname = gethostname()
username = os.environ['USER']
pwd = os.getcwd()
homedir = os.path.expanduser('~')
pwd = pwd.replace(homedir, '~', 1)
if len(pwd) > 33:
    pwd = pwd[:10]+'...'+pwd[-20:] # first 10 chars+last 20 chars
print '[%s@%s:%s] ' % (username, hostname, pwd)

现在从终端测试它:

export PROMPT_COMMAND='PS1="$(python ~/.short.pwd.py)"'

如果您对结果满意,只需将命令附加到您的~/.bashrc.

答案3

解决该问题的另一种方法是在 PS1 中包含一个换行符,以便工作目录和实际提示符出现在不同的行上,例如:

PS1="\w\n>"

答案4

基于克里斯·沙利文的答案,但保留~主文件夹

get_bash_w() {
  # Returns the same working directory that the \W bash prompt command
  echo $(pwd | sed 's@'"$HOME"'@~@')
}

split_pwd() {
  # Split pwd into the first element, elipsis (...) and the last subfolder
  # /usr/local/share/doc --> /usr/.../doc
  # ~/project/folder/subfolder --> ~/project/../subfolder
  split=2
  W=$(get_bash_w)
  if [ $(echo $W | grep -o '/' | wc -l) -gt $split ]; then
    echo $W | cut -d'/' -f1-$split | xargs -I{} echo {}"/../${W##*/}"
  else
    echo $W
  fi
}

export PS1="\$(split_pwd) > "

相关内容