这是我想出的,但是当我更改目录时,结果不会改变并显示我的$ HOME目录结果
示例:
export PS1="\n\[$Blue\](\[$Red\]\u\[$White\] @
\[$Red\]$(hostname)\[$Blue\])---(\[$Green\]\w\[$Blue\])\n(\[$Green\]$(ls
-1 |wc -l) files\[$Blue\])<<--^\n\[$BRed\]\$\[\033[0m\]"
我想也许可以添加这个,但我不知道如何。
for file in $PWD do echo `ls -1 |wc -l` done
有人可以帮忙吗?
答案 0 :(得分:1)
在提示延迟之前,您必须小心延迟执行ls
命令。现在看来,它是在你定义PS1
part1="\n[$Blue]([$Red]\u[$White] @ [$Red]$(hostname)[$Blue])---([$Green]\w[$Blue])"
part2="\n([$Green]"'$(ls -1 |wc -l)'" files[$Blue])<<--^"
part3="\n[$BRed]\\\$[\033[0m]"
export PS1="${part1}${part2}${part3}"
unset part1 part2 part3
请注意part2
第二个想法:为了保护包含换行符的文件,计数代码可以是
$(files=(*); echo "${#files[@]}") # "visible" files only
# or
$(f=(* .[^.] .??*); echo "${#f[@]}") # includes hidden files, not . or ..
将文件名存储在数组中并打印出数组的大小。此外,它只使用bash内置命令。
答案 1 :(得分:0)
包括
\$(ls -l | wc -l)
PS1中的任何地方
答案 2 :(得分:0)
我会使用find
代替ls
来计算文件,以确保如果文件名包含换行符,则不会多次计算。所以我会做那样的事情:
find -mindepth 1 -maxdepth 1 -printf 1 | wc -c
您可以将它放在定义os PS1
中,如下所示:
PS1='... $(find -mindepth 1 -maxdepth 1 -printf 1 | wc -c) ...'