要设置场景,我正在编辑我的/.bash_profile,并希望当前目录以及我PS1中所述目录中的文件。虽然它有效,但我的间距出现了一个奇怪的错误:
lines=$(ls | wc -l)
PS1='\n\e[2m(\w) ($lines)\e[22m\n> '
我不明白为什么会这样,据我所知 - 代码不应该添加那个空格。
section#page1 {
background: url('../img/background.jpg') no-repeat center center fixed;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;
height: 100vh;
overflow-x: hidden;
overflow-y: scroll;
}
我不知道为什么会这样,并且有一些Bash魔法的人会很方便。
答案 0 :(得分:2)
PS1
与大多数变量略有不同,至少在如何使用它时。它的值不会简单地打印到标准错误以显示提示,这很明显,如果您将提示与echo "$PS1"
的输出进行比较。
评估规则与正常评估规则不同,您可以在此处看到$lines
值的前导空格在提示时未从$lines
的未加引号扩展中删除终于显示了。
解决此问题的一种方法是使用执行正常评估的shell命令替换普通参数扩展,然后捕获该命令的输出以在提示中使用:
PS1='\n\e[2m(\w) ($(echo $lines))\e[22m\n> '
更好的是,不要解析ls
的输出:创建一个数组并输出它的长度:
PS1='\n\e[2m(\w) ($(f=(*); echo ${#f[@]}))\e[22m\n> '
(另外,除非您在每个提示之前重置lines
的值,例如在PROMPT_COMMAND
中,否则您将始终显示{{1}时所在目录的文件数设置了,可能是您的主目录。在中获取文件计数提示本身可以获取当前目录的文件数,无论可能是什么。)