首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash:如何用省略号截断长输出的ls?

Bash:如何用省略号截断长输出的ls?
EN

Stack Overflow用户
提问于 2019-04-08 07:46:17
回答 2查看 966关注 0票数 2

我正在通过添加更多信息来自定义Bash提示符,其中包含对当前目录列表的一瞥。

我已经明白了,更改变量PS1将帮助我处理所有事情。更重要的是,这个变量允许我每次执行命令。

我尝试使用ls --color=always获取当前目录中的文件列表。执行情况如下:

代码语言:javascript
复制
PS1='... $(ls -F --color=always | xargs | cut -d " " -f -20)\n ...'

shell每次在当前目录中为我提供多达20个文件名。然而,它从来没有告诉我是否有更多的文件。我该怎么办?我希望它能用省略号(‘.’)告诉我或者别的什么。

PS:根据输出环境(例如tty和file),'ls‘的行为似乎不同。如果我希望在提示符中有格式化的输出(有更多的行),该怎么办?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-08 08:34:01

如果您只想在每个提示符之前查看当前目录中的文件列表,可以只设置PROMPT_COMMAND=ls。不要为了这个目的和PS1玩。

对于你的要求,我认为这是可行的:

代码语言:javascript
复制
PROMPT_COMMAND="ls | awk 'NR>20{print \"...\"; exit}1' | xargs"

解释:

  1. PROMPT_COMMAND=something:在显示PS1提示符之前运行something
  2. ls:列出文件。可以随意添加-F--color=auto
  3. awk 'NR>20{print "..."; exit}1':如果行号大于20,只需打印...并退出即可。否则,按原样打印行(后面是1)。
  4. xargs:将空格压平成单个空格字符.

注意:可以将awk | xargs合并到单个awk命令中,从而为每个提示符节省一个进程。然而,这将需要额外的转义"字符,这可能会使初学者感到困惑。

代码语言:javascript
复制
PROMPT_COMMAND="ls --color=always | awk 'NR>20{printf \"...\"; exit}{printf \$0 \" \";}END{print \"\"}'"
票数 1
EN

Stack Overflow用户

发布于 2019-04-08 07:56:49

也许你可以用

代码语言:javascript
复制
$(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两次)。

希望能帮上忙。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55568508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档