Bash 提示:如何获得目录路径的首字母

Ham*_*ner 5 bash command-line bashrc

我通常在 bash 提示符 ( PS1='\u@\h:\W$ ') 中只有当前目录的名称,所以如果我在里面,~/projects/superapp/src/我会得到:

hamish@host:src$ 
Run Code Online (Sandbox Code Playgroud)

但是,我想在没有完整路径的情况下指示完整路径。我看过人们会看到的截图

hamish@host:~/p/s/src$ 
Run Code Online (Sandbox Code Playgroud)

如果在上面的示例目录中。那么 PS1 的价值是多少呢?或者失败了,我需要什么脚本.bashrc来制作它?

Tel*_*hus 2

好吧,我很好奇,所以这是一个解决方案:

  1. 首先,使用William Pursell对我在上面评论中链接的SO 问题的答案进行轻微调整来创建一个函数。
  2. 接下来,将其放入 $PS1 中的\$(function_name)适当位置。

举个例子:

short_pwd() {
    cwd=$(pwd | perl -F/ -ane 'print join( "/", map { $i++ < @F - 1 ?  substr $_,0,1 : $_ } @F)')
    echo -n $cwd
}
# later in your .bashrc
PS1="\u \$(short_pwd) \$ "
Run Code Online (Sandbox Code Playgroud)

我希望比我更擅长 Bash 脚本编写的人可以建议清理该函数的方法,但这应该能让您了解如何在提示中使用另一个命令(或 Bash 函数)的输出。另请参阅此处:http://www.linux.org/docs/ldp/howto/Bash-Prompt-HOWTO/x279.html

根据您的评论,我再次查看并意识到我的解决方案需要双引号。如果你用单引号引用这样的函数,那么它根本不起作用。