【问题标题】:GNU 'ls' command not outputing the same over a pipe [duplicate]GNU'ls'命令没有通过管道输出相同的[重复]
【发布时间】:2014-01-23 22:40:35
【问题描述】:

当我在我的系统上执行命令ls 时,我得到以下输出:

System:~ user# ls
asd  goodfile  testfile  this is a test file

但是,当我将ls 传送到另一个程序(例如catgawk)时,输出如下:

System:~ user# ls | cat
asd
goodfile
testfile
this is a test file

如何让ls 读取终端大小并通过管道输出与直接打印到终端时相同的大小?


这个问题已经解决了。

由于我使用的是 bash,因此我使用以下方法来实现所需的输出:

System:~ user# ls -C -w "$(tput cols)" | cat

【问题讨论】:

    标签: shell gnu ls


    【解决方案1】:

    使用ls -C 再次获取列输出。

    ls 检测到它的输出不是终端时,它假定它的输出正在被其他想要解析它的进程处理,所以它切换到-1(每行一个条目) 模式使解析更容易。要将其设置为列格式,就像直接输出到终端时一样,请使用-C 切换回列模式。

    (注意,如果您关心颜色输出,您可能还必须使用--color,这通常也会通过输出到管道来抑制。)

    【讨论】:

      【解决方案2】:

      也许-x“按行而不是按列列出条目”以及可能的-w“假设屏幕宽度而不是当前值”是您所需要的。

      【讨论】:

        【解决方案3】:

        当输出到管道或非终端时,输出格式类似于ls -1。如果您想要列输出,请改用ls -C

        差异的原因是在 shell 脚本中解析每文件一行的输出通常更容易。

        【讨论】:

          【解决方案4】:

          由于我使用的是 bash,因此我使用以下方法来实现所需的输出:

          System:~ user# ls -C -w "$(tput cols)" | cat
          

          【讨论】:

            猜你喜欢
            • 2018-08-18
            • 2012-10-17
            • 1970-01-01
            • 2020-10-08
            • 1970-01-01
            • 2015-02-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多