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 个组成部分
我在一个 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 个组成部分