我想将bash提示提示设置为固定宽度,并在$之前弥补空间的差异,因此无论是长还是短,我的提示都保持相同的宽度:

[name@host] ~/Directory/Dir...Another/LastDir $ 
[name@host] ~/Directory(branch)               $ 

目前,在短目录路径中,我的提示看起来像这样:

[name@host] ~/Directory(branch) $ 

更深的目录路径看起来像这样:

[name@host] ~/Directory/Dir...Another/LastDir $ 

您可以看到我已经在中间截断了PWD,因此我可以看到路径从哪里开始以及它结束的位置。我想在$之前弥补差额。

这是我当前的提示:

# keep working directory to 30 chars, center tuncated
prompt_pwd() {
  local pwd_symbol="..."
  local pwd_length=30
  newPWD="${PWD/#$HOME/~}"
  [ ${#newPWD} -gt ${pwd_length} ] && newPWD=${newPWD:0:12}${pwd_symbol}${newPWD:${#newPWD}-15}
}
# set prompt
prompt_color() {
  PROMPT_COMMAND='prompt_pwd;history -a;title_git'
  PS1="${WHITEONMAGENTA}[\u@\h]${MAGENTA} \w\$(parse_git_branch) ${MAGENTABOLD}\$${PS_CLEAR} "
  PS1=${PS1//\\w/\$\{newPWD\}}
    PS2="${WHITEONTEAL}>${PS_CLEAR} "
}

在我的搜索中,我发现 提示您任期的宽度 确实有一些填充,但无法在此特定的提示下工作。

有帮助吗?

解决方案

如果您的道路太短([ ${#newPWD} -le ${pwd_length} ]),您可以使用printf(1)扩展它。

printf -v newPWD "%-*s" $pwd_length "$newPWD"

这将使字符串在 $newPWD 具有场宽度 $pwd_length.

printf(1)内置在bash中,因此运行每个提示并不太贵。

其他提示

您可以设置环境变量 BASH_COMMAND, ,这使您可以手动定义提示。您可以使用 expand -t 将其达到所需的长度。

我所做的就是定位我的目录等 多于 我的提示,所以我不必担心:

myusername@mybox:/home/myusername/some/directory
$ 

这样,我还可以为复制SCP和SSH命令的上述行复制上面的行带来的额外好处,而不必预先预留user@host:/directory示例。

这是我的$ PS1变量,如果您想尝试一下:

\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n\$

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top