我正在通过添加更多信息来自定义Bash提示符,其中包括对当前目录列表的一瞥。
我已经知道,更改变量PS1
将对我有帮助。更重要的是,该变量允许我每次执行命令。
我尝试使用ls --color=always
来获取当前目录中的文件列表。实现如下:
PS1='... $(ls -F --color=always | xargs | cut -d " " -f -20)\n ...'
每次在当前目录中,shell最多可以获取20个文件名。但是,它永远不会告诉我是否还有更多文件。我需要做什么?我希望它能用省略号(...)告诉我。
PS:根据输出环境(例如tty和file),“ ls”的行为似乎有所不同。如果我想在提示符下显示格式化的输出(多行)怎么办?
答案 0 :(得分:0)
也许您可以只使用
$(ls -F --color=always | xargs | cut -d " " -f -20; [ $(ls -l . | egrep -c '^-') -gt 20 ] && echo ...)
第二部分来自Count number of files within a directory in Linux?。
但是我想有更好的方法(例如,不两次拨打 ls )。
希望有帮助。
答案 1 :(得分:0)
如果只想在每次提示前查看当前目录中的文件列表,则只需设置PROMPT_COMMAND=ls
。为此,请勿与PS1
一起玩。
根据您的要求,我认为这会起作用:
PROMPT_COMMAND="ls | awk 'NR>20{print \"...\"; exit}1' | xargs"
说明:
PROMPT_COMMAND=something
:在显示something
提示符之前运行PS1
。ls
:列出文件。随时添加-F
或--color=auto
awk 'NR>20{print "..."; exit}1'
:如果行号大于20,则只需打印...
并退出。否则,按原样打印行(尾随1
)。xargs
:将空格展平为单个空格字符。注意:awk | xargs
可以合并为单个awk
命令,从而为您节省了每次提示的过程。但是,这需要额外转义"
字符,这会使初学者感到困惑。
PROMPT_COMMAND="ls --color=always | awk 'NR>20{printf \"...\"; exit}{printf \$0 \" \";}END{print \"\"}'"