Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash:如何截断';ls';在Bash中使用省略号?_Bash - Fatal编程技术网

Bash:如何截断';ls';在Bash中使用省略号?

Bash:如何截断';ls';在Bash中使用省略号?,bash,Bash,我通过添加更多信息来定制Bash提示符,其中包含对当前目录列表的浏览 我已经明白,更改变量PS1将对我的一切都有帮助。更重要的是,这个变量允许我每次执行命令 我尝试使用ls--color=always获取当前目录中的文件列表。实施情况如下: PS1='... $(ls -F --color=always | xargs | cut -d " " -f -20)\n ...' shell每次在当前目录中获取最多20个文件名。但是,它从不告诉我是否有更多的文件。我需要做什么?我希望它用省略号(“…

我通过添加更多信息来定制Bash提示符,其中包含对当前目录列表的浏览

我已经明白,更改变量
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
    。Explicit
    print”“
    printf”\n
    将添加它。