Bash:如何截断';ls';在Bash中使用省略号?
我通过添加更多信息来定制Bash提示符,其中包含对当前目录列表的浏览 我已经明白,更改变量Bash:如何截断';ls';在Bash中使用省略号?,bash,Bash,我通过添加更多信息来定制Bash提示符,其中包含对当前目录列表的浏览 我已经明白,更改变量PS1将对我的一切都有帮助。更重要的是,这个变量允许我每次执行命令 我尝试使用ls--color=always获取当前目录中的文件列表。实施情况如下: PS1='... $(ls -F --color=always | xargs | cut -d " " -f -20)\n ...' shell每次在当前目录中获取最多20个文件名。但是,它从不告诉我是否有更多的文件。我需要做什么?我希望它用省略号(“…
PS1
将对我的一切都有帮助。更重要的是,这个变量允许我每次执行命令
我尝试使用ls--color=always获取当前目录中的文件列表。实施情况如下:
PS1='... $(ls -F --color=always | xargs | cut -d " " -f -20)\n ...'
shell每次在当前目录中获取最多20个文件名。但是,它从不告诉我是否有更多的文件。我需要做什么?我希望它用省略号(“…”)或其他什么来告诉我
PS:“ls”似乎根据输出环境(例如tty和文件)的不同而表现不同。如果我想在提示符中使用格式化输出(多行)?也许您可以使用
$(ls-F-color=always | xargs | cut-d”“-F-20;[$(ls-l.| egrep-c'^-')-gt 20]&echo…)
第二部分是从
但我认为有更好的方法(例如,不要两次呼叫ls)
希望有帮助。如果您只想在每次提示之前查看当前目录中的文件列表,您可以设置
prompt\u COMMAND=ls
。不要为了这种目的而玩PS1
根据您的要求,我认为这将起作用:
PROMPT_COMMAND="ls | awk 'NR>20{print \"...\"; exit}1' | xargs"
说明:
PROMPT\u命令=something
:在显示PS1
提示符之前运行something
ls
:列出文件。请随意添加-F
或-color=auto
awk'NR>20{打印“…”;退出}1'
:如果行号大于20,只需打印…
并退出即可。否则,按原样打印行(尾部1
)xargs
:将空格展平为单个空格字符awk | xargs
可以合并到单个awk
命令中,从而为每个提示节省一个进程。然而,这需要额外转义“
字符,这会让初学者感到困惑
PROMPT_COMMAND="ls --color=always | awk 'NR>20{printf \"...\"; exit}{printf \$0 \" \";}END{print \"\"}'"
@biffen:
xargs
无任何参数与xargs echo
相同。基本上,OP希望将所有相邻的空格平铺成一个空格字符。感谢您的建议。我认为可以不调用ls
两次。也许将结果存储在变量中会起作用,当然这个过程需要在一个局部函数中完成。我将尝试它。很好。现在请告诉我您找到了什么。我尝试了以下方法:首先定义一个名为showdir()
。然后定义一个局部变量local FILES=$(ls--color=always-F)
并通过echo${FILES}xargs | cut d”“-F-20;[$(wc-w谢谢。我会看一看的!感谢您介绍PROMPT\u命令
。我现在想知道为什么awk
命令中需要有END
。是否打印“
语句仅表示提示符前的新行?前面的printf
语句不添加新行\n
。Explicitprint”“
或printf”\n
将添加它。