在进入 container 终端进行命令行测试,由于目录太深,左边的路径占满了整个屏幕,右侧可打字的空间就特别的小,因此个人经过几天的实验,大概保留最后两级目录,是比较舒适的,同时也大概知道所在的文件层级。当我们需要完整路径时,随时可以用 pwd 得到。

命令

最简单的方案

PS1='$USER@\w \$ '; PROMPT_DIRTRIM=2

其中 \w 表示当前的工作目录,\$ 则表示当前的权限状态,即普通用户态。PROMPT_DIRTRIM 说明去掉 parents 目录,但保留最后两级,而 trim 掉的中间目录以 ... 代替。

效果如下:

# old
(base) muwaii@dell-PowerEdge-T640:~/.cache/pip/http/e/7/9/8/4$ PS1='\w \$ '; PROMPT_DIRTRIM=2
muwaii@~/.../8/4 $
muwaii@~/.../8/4 $pwd
/home/muwaii/.cache/pip/http/e/7/9/8/4

替代法

PS1='${PWD#"${PWD%/*/*}/"} \$ '

让我们一步步分解:

# 先定义去掉后两级目录的当前工作目录,赋值为 TRIM_TWO_PARENTS
root@dell-7920-tower:/opt/nvidia/deepstream/deepstream-6.2/samples/configs/deepstream-app# TRIM_TWO_PARENTS="${PWD%/*/*}"
root@dell-7920-tower:/opt/nvidia/deepstream/deepstream-6.2/samples/configs/deepstream-app# echo $TRIM_TWO_PARENTS
/opt/nvidia/deepstream/deepstream-6.2/samples
# 再用 TRIM_TWO_PARENTS 去替换原来的 PWD,那么得到就是原来后两级目录
root@dell-7920-tower:/opt/nvidia/deepstream/deepstream-6.2/samples/configs/deepstream-app# echo ${PWD#"$TRIM_TWO_PARENTS"} \$
/configs/deepstream-app $
# escape double quote characters and keep tail space
# 接着我们在 echo 命令中,对双引号进行转译,并保留最后的空格。因为 bash 本身解释器是将 '' 视作字面量,所以用双引号。
root@dell-7920-tower:/opt/nvidia/deepstream/deepstream-6.2/samples/configs/deepstream-app# echo "${PWD#\"${PWD%/*/*}/\"} \$ "
/opt/nvidia/deepstream/deepstream-6.2/samples/configs/deepstream-app $
root@dell-7920-tower:/opt/nvidia/deepstream/deepstream-6.2/samples/configs/deepstream-app# PS1='${PWD#"${PWD%/*/*}/"} \$ ' 
# 替换完成
configs/deepstream-app #
  • PS1: 是一个特殊的 shell 变量,它保存的是 shell 用来指示它已准备好接受用户输入的提示字符串。
  • ${PWD}: 保存当前工作目录的 shell 变量。
  • "${PWD%/*/*}/": 是一个参数扩展,从存储在$PWD变量中的路径中删除两个父目录,并添加一个尾部斜线。
  • "${PWD#..."}: 使用上一步的结果,替换原来的 $PWD,得到的就是最后两级目录。
  • \$: 最末尾显示为美元符号$,这通常用于表示正常的用户外壳提示。

将所有步骤串联起来,该命令设置shell提示字符串,以显示相对于两个父目录的当前工作目录,并在最后显示一个$符号。例如,如果当前工作目录是/home/user/project1/src/,提示符将被设置为project1/src $

添加新评论