2016-03-04 2 views
3

Я пытаюсь использовать файл /etc/passwd в список домашних каталогов пользователей в системе, отсортированной и без повторений, так что несуществующие каталоги не будут напечатанными .. Это моя команда:Bash Ls и команда труба

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

Он действует так, как будто я только что запустил ls -ld без каких-либо аргументов из командной строки.

ответ

4

Вы не можете трубы вещи в ls .. Вы могли бы сделать что-то вроде:

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

По порождая новый Баш казнить cut | sort и передав его в качестве аргумента ls

+0

Спасибо, это работает! Раньше я пробовал 'ls -ld $ (" cut -f 6 -d ':'/etc/passwd | sort -su ")' и bash сказал, что его неизвестная команда, почему? – user3105173

+2

Возможно, потому, что вы передали команду '$()' в '' '' как строку. Вы должны передать команду напрямую;) – FredMaggiowski

4

ls не берет трубчатый выход. Можно, однако, использовать прямые кавычки, чтобы выполнить его в списке каталогов:

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

Это также работает, спасибо! – user3105173

2

Вы можете использовать xargs

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

Спасибо, это тоже сработало! – user3105173

2

Вы были не далеко, это было достаточно, чтобы добавить xargs перед тем LS:

cut -f 6 -d ':' /etc/passwd | sort -u | xargs ls -ld 
Смежные вопросы