我正在通过添加更多信息来自定义Bash提示符,其中包含对当前目录列表的一瞥。
我已经明白了,更改变量PS1将帮助我处理所有事情。更重要的是,这个变量允许我每次执行命令。
我尝试使用ls --color=always获取当前目录中的文件列表。执行情况如下:
PS1='... $(ls -F --color=always | xargs | cut -d " " -f -20)\n ...'shell每次在当前目录中为我提供多达20个文件名。然而,它从来没有告诉我是否有更多的文件。我该怎么办?我希望它能用省略号(‘.’)告诉我或者别的什么。
PS:根据输出环境(例如tty和file),'ls‘的行为似乎不同。如果我希望在提示符中有格式化的输出(有更多的行),该怎么办?
发布于 2019-04-08 08:34:01
如果您只想在每个提示符之前查看当前目录中的文件列表,可以只设置PROMPT_COMMAND=ls。不要为了这个目的和PS1玩。
对于你的要求,我认为这是可行的:
PROMPT_COMMAND="ls | awk 'NR>20{print \"...\"; exit}1' | xargs"解释:
PROMPT_COMMAND=something:在显示PS1提示符之前运行something。ls:列出文件。可以随意添加-F或--color=autoawk '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 \"\"}'"发布于 2019-04-08 07:56:49
也许你可以用
$(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两次)。
希望能帮上忙。
https://stackoverflow.com/questions/55568508
复制相似问题