Bash ls 和命令管道

Bash ls and command pipe

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

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

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

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

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

您不能将内容通过管道传输到 ls.. 您可以这样做:

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

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

你可以使用 xargs

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

你离得不远,在ls前加上一个xargs就够了:

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