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)
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.
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)