0

我在 .basrhc 文件中定义了以下 bash 提示变量:

PS1='\u@\h:\[\e[01;34m\] \[$(pwd|sed -e "s!.*/\\([^/]*/[^/]*/[^/]*\\)!\\1!g")\] \[\e[00m\] \[\e[01;31m\]\t\[\e[00m\]\$ '

从目录 /one/two/three/four/ 中,这看起来像是以下内容的彩色版本:

me@my-computer two/three/four 12:01:37$

(我不想把我得到的图像,但我是一个没有代表点的新人..)

我遇到了无法正确转义的问题(我认为这是源代码),因为当向上滚动浏览我的历史记录时,这些行会截断 bash 提示符,并且终端不会在正确的位置显示光标命令行。不过,您可能需要向上滚动几行才能看到这种效果。

我认为问题出在sed命令上,但如果正确,我不确定如何解决。
有什么想法吗?

4

2 回答 2

2

您可能希望改为设置 的值PROMPT_DIRTRIM。它的工作方式与您想要的略有不同,但它可能足够接近,它是内置的bash,并且更容易使用。(注意:PROMPT_DIRTRIMbash4.x 的新手(至少 4.1,可能是 4.0))。

PROMPT_DIRTRIM=3
PS1='\u@\h:\[\e[01;34m\] \w\[\e[00m\] \[\e[01;31m\]\t\[\e[00m\]\$ '

您还可以使用该PROMPT_COMMAND变量通过将其分解为可管理的步骤来简单地创建提示。bash如果PROMPT_DIRTRIM不可用或不符合您的喜好,这将适用于早期版本。

prompt_cmd () {
    # Trim leading directories off the current working directory.
    # Use single quotes so you don't need to escape the backslashes.
    trimmed_pwd=$( pwd | sed -e 's!.*/\([^/]*/[^/]*/[^/]*\)!\1!g' )

    # The initial part of your prompt
    PS1='\u@\h:\[\e[01;34m\] '
    # Add the directory; no single quotes, so the parameter expands, and
    # no need to wrap it in \[ \]
    PS1+=$trimmed_pwd
    # And the final part of your prompt
    PS1+='\[\e[00m\] \[\e[1;31m\]\t\[\e[00m\]\$ '
}
PROMPT_COMMAND='prompt_cmd'
于 2013-04-17T13:22:01.143 回答
0

在 sed 命令中,单引号和一些简单的正则表达式似乎可以工作。我不知道提示和颜色的东西,希望这会有所帮助。

sed 's!..*/\(.*/.*/.*\)!\1!g'
于 2013-04-17T11:31:50.887 回答