Bash ls 和命令管道

3

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

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

它的作用就像是我从命令管道中根本没有带任何参数一样,只是运行了ls -ld命令。

4个回答

4

ls命令无法接受管道输出。不过,您可以使用反引号来在一组目录上执行它:

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

4

你不能将东西管道传输到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说它是一个未知命令,为什么? - user3105173
2
可能是因为你把命令作为字符串传递给了 $( ),你应该直接传递命令 ;) - fredmaggiowski

2

你可以使用xargs

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

2

你并不遥远,只需要在 ls 命令之前加上 xargs 就可以了:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接