【问题标题】:fixed width bash prompt固定宽度的 bash 提示符
【发布时间】:2011-02-24 18:58:31
【问题描述】:

我想将我的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} "
}

在我的搜索中,我找到了A Prompt the Width of Your Term,它确实做了一些填充,但无法让它适用于这个特定的提示。

【问题讨论】:

    标签: macos bash .bash-profile


    【解决方案1】:

    我所做的就是将我的目录和这样的位置高于我的提示,所以我不必担心它:

    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\$

    【讨论】:

    • 我喜欢这个,但是为了真正的复制和粘贴工作,我想在任何带有空格的目录周围加上引号。
    • @seaofclouds:是的,这是我不必过多使用的东西,但我知道你来自哪里。但是,与手动输入或使用 \ 编辑几个空格相比,我仍然认为部分解决方案总比没有好。可能有一种方法可以对此进行注释,但我对 PS1 变量的了解还不够(还)。
    • 我正在尝试使用您的修复程序(Ubuntu 12.04)。要进行此修复,您是否将 .bashrc 编辑为: export PS1="[\e]0;\w\a]\n[\e[32m]\u@\h [\e[33m]\w[ \e[0m]\n\$" ?我做了这个编辑,然后再次打开了 bash。但是,我的提示没有改变。你碰巧知道我做错了什么吗?
    • 根据环境,您可能必须将 export PS1= 命令放入您的 .profile 而不是 .bashrc,尽管我对细节有点模糊。在工作中,我使用.profile,在家里我使用.bashrc。 YMMV
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      这将使$newPWD 中的字符串左对齐,字段宽度为$pwd_length

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-29
        • 2012-02-21
        • 1970-01-01
        • 1970-01-01
        • 2012-02-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多