【发布时间】:2018-04-18 17:06:28
【问题描述】:
所以我从这个 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]
如您所见,在文件数量之前有相当多的空间。实际代码在这里:
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)确实有空格。我想继续糟糕的趋势,你可以做到$(ls | wc -l | tr -d '[[:space:]]') -
(另外,请参阅pubs.opengroup.org/onlinepubs/9699919799/utilities/echo.html 中的应用程序用法和基本原理部分,了解为什么在
echo中使用反斜杠转义序列是一个坏主意;printf是首选替代品,它会表现在所有 POSIX 兼容的 shell 中保持一致)。 -
...顺便说一句,如果您只想在更改目录时执行更昂贵的操作,而不是每次打印提示时,请考虑遵循stackoverflow.com/questions/49882286/… 的答案中给出的模式
-
PROMPT_COMMAND=set_prompt; set_prompt () { PS=; ...; PS1+="┌─[$status]───[$userhost]───[$dir]───[$file_info]\n" PS1+="└───▶"; },...是设置对提示有贡献的四个变量的代码,可以更轻松地理解提示的构建方式以及以后对其进行修改。跨度>