bash 中的多个子字符串替换

Multiple substring replacement in bash

我在一个 HPC 集群中工作,它有很多分区($HOME、$SCRATCH、$WORKDIR、$SHARED,...),我试图找到一种方法来清楚地识别我是哪个分区我现在。

经过一番挖掘,我发现

export PS1="\e[33;1m\u@\h: \e[31m\w\e[0m$ "

会告诉我我在找什么。但是,路径变得非常麻烦,因为所有这些分区都有很长的 pwd 输出。

我发现这个命令,

aaa@bbb: ~$ echo $PROMPT_COMMAND
printf "3]0;%s@%s:%s[=12=]7" "${USER}" "${HOSTNAME%%.*}" ${PWD/#$HOME/~}"

主要是 ${PWD/#$HOME/~} 部分,可能是 $HOME 目录只显示 ~.

的原因

有没有办法改变这个环境变量(或任何其他替代方案)让我拥有类似的东西:

aaa@bbb: ~/foo/bar$          # when I'm working in $HOME
aaa@bbb: scratch/foo/bar$    # when I'm working in $SCRATCH
aaa@bbb: shared/foo/bar$     # when I'm working in $SHARED

PROMPT_COMMAND 设置为命令,这将设置一个具有截断路径值的变量。

PS1中的\w替换为变量名。

我的例子:

export PROMPT_COMMAND='export CURDIR=$( pwd | sed "s|$HOME|~|;s|/var/lib/postgresql|pg|;s|/opt|stuff|" )'
export PS1='\[3]0;\u@\h:\w[=10=]7\]\[3[01;32m\]\u@\h\[3[01;34m\] $CURDIR $\[3[00m\] '

在 ~/.bashrc 中你可以定义:

PROMPT_DIRTRIM=3

保留 $PWD 的最后 3 个组成部分