【问题标题】:Bash ls and command pipeBash ls 和命令管道
【发布时间】:2016-06-18 03:36:13
【问题描述】:

我正在尝试使用/etc/passwd 文件列出系统中用户的主目录,并排序且不重复,这样不存在的目录就不会被打印出来。 这是我的命令:

cut -f 6 -d ':' /etc/passwd | sort -su | ls -ld

就好像我只是运行ls -ld,根本没有来自命令管道的参数。

【问题讨论】:

    标签: bash shell unix command-line-arguments ls


    【解决方案1】:

    ls 不采用管道输出。但是,您可以使用前向引号在目录列表上执行它:

    ls `cut -f 6 -d ':' /etc/passwd | sort -su `
    

    【讨论】:

      【解决方案2】:

      您不能将内容通过管道传输到 ls.. 您可以执行以下操作:

      ls -ld $(cut -f 6 -d ':' /etc/passwd | sort -su)
      

      通过生成一个新的 bash 来执行 cut | sort 并将其作为 ls 参数传递

      【讨论】:

      • 谢谢,这行得通!早些时候我试过ls -ld $("cut -f 6 -d ':' /etc/passwd | sort -su") 并且bash 说它是一个未知命令,为什么?
      • 可能是因为您将命令作为字符串传递给" " 中的$( )。您应该直接传递命令;)
      【解决方案3】:

      你可以使用xargs

      cut -f 6 -d ':' /etc/passwd | sort -su | xargs ls
      

      【讨论】:

        【解决方案4】:

        你不远了,在ls前加个xargs就够了:

        cut -f 6 -d ':' /etc/passwd | sort -u | xargs ls -ld
        

        【讨论】:

          猜你喜欢
          • 2013-10-23
          • 1970-01-01
          • 2013-01-22
          • 2014-06-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-11-25
          相关资源
          最近更新 更多