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

sma*_*uel 42 command-line bash prompt

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

PS1="\W >"
Run Code Online (Sandbox Code Playgroud)

只打印当前目录而不是完整路径,但有没有办法有类似的东西:

/home/smauel/de...ther/folder >
Run Code Online (Sandbox Code Playgroud)

gei*_*rha 78

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

PROMPT_DIRTRIM=2
Run Code Online (Sandbox Code Playgroud)

对于类似于 João Pinto 的示例,(这将适用于较旧的 bash 版本并确保路径组件永远不会超过 30 个字符),您可以执行以下操作:

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

  • PROMPT_DIRTRIM 的文档可以在这里找到:https://www.gnu.org/software/bash/manual/html_node/Bash-Variables.html (4认同)

Joã*_*nto 31

创建一个实现所需修剪逻辑的小型 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)
Run Code Online (Sandbox Code Playgroud)

现在从终端测试它:

export PROMPT_COMMAND='PS1="$(python ~/.short.pwd.py)"'
Run Code Online (Sandbox Code Playgroud)

如果您对结果没问题,只需将命令附加到您的~/.bashrc.

  • @FloatingRock 正确。只需将其添加到 .bashrc 文件中即可。 (2认同)

ak2*_*ak2 12

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

PS1="\w\n>"
Run Code Online (Sandbox Code Playgroud)


小智 5

将其添加到您的底部~/.bashrc

split_pwd() {
        # Only show ellipses for directory trees -gt 3
        # Otherwise use the default pwd as the current \w replacement
        if [ $(pwd | grep -o '/' | wc -l) -gt 3 ]; then
                pwd | cut -d'/' -f1-3 | xargs -I{} echo {}"/../${PWD##*/}"
        else
                pwd
        fi
}


export PS1="\$(split_pwd) > "
Run Code Online (Sandbox Code Playgroud)

诚然,这可能会更干净,但我想尝试一下。

深度超过三层的目录的预期输出。

/home/chris/../Node Projects >
Run Code Online (Sandbox Code Playgroud)

来自桌面和返回的目录的预期输出。

/home/chris/Desktop > 
/home/chris >  
/home
Run Code Online (Sandbox Code Playgroud)