Bash提示间距问题

Bash prompt spacing issue

所以我从这个 reddit 线程中找到了一个很酷的 bash 提示: https://www.reddit.com/r/archlinux/comments/5vusvx/here_is_my_bash_prompt_whats_your_favorite/

我正在测试的是@khordes 的最高评论。这是预期的: https://imgur.com/a/t3evh

但是,我得到了一些不同的东西。这是问题所在:

───[~]───[ 33 files, 2334400]

如您所见,文件数量前有相当多的space。实际代码在这里:

PS1="┌─[\`if [ $? = 0 ]; then echo \[\e[32m\]✔\[\e[0m\]; else echo \[\e[31m\]✘\[\e[0m\]; fi\`]───[\[\e[01;49;39m\]\u\[\e[00m\]\[\e[01;49;39m\]@\H\[\e[00m\]]───[\[\e[1;49;34m\]\W\[\e[0m\]]───[\[\e[1;49;39m\]$(ls | wc -l) files, $(ls -lah | grep -m 1 total | sed 's/total //')\[\e[0m\]]\n└───▶ "

任何有关如何解决该问题的意见将不胜感激。

此提示使用 $(ls | wc -l) 列出当前目录中的文件。

在 GNU 平台上,wc -l 在未传递任何文件名时没有前面的白色space。

在 BSD 平台(例如 MacOS)上,数字以 spaces 为前缀。

因此,此提示的作者可能在 Linux 变体或其他 GNU 平台上对其进行了测试,我假设您使用的是 运行 MacOS 或其他 BSD。为了保持一致,您需要确保删除这样的 space——或者切换到一种不依赖于 wc 的文件列表机制,例如 BashFAQ #4 中给出的机制。

一个备选方案如下:

$(shopt -s nullglob; set -- *; echo "$#")