Почему подстановка процесса приводит к файлу с именем /dev /fd /63, который является трубой?

Я пытаюсь понять именованные каналы в контексте этого конкретного примера.

Я набираю <(ls -l) в моем терминале и получаю вывод как, bash: /dev/fd/63: Permission denied.

Если я набираю cat <(ls -l), я могу видеть содержимое каталога. Если я заменил cat на echo, Я думаю, что получаю название терминала (или оно?).

echo <(ls -l) выводит результат как /dev/fd/63.

Кроме того, этот вывод неясен для меня.

ls -l <(echo "Whatever")
lr-x------ 1 root root 64 Sep 17 13:18 /dev/fd/63 -> pipe:[48078752]

Однако, если я даю, ls -l <(), он перечисляет мне содержимое каталога.

Что происходит в случае именованного канала?

34 голоса | спросил Ramesh 17 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 17 Sep 2014 22:17:43 +0400 2014, 22:17:43

1 ответ


-5

Вы неправильно понимаете команду ls и перенаправление. ls перечисляет файлы и каталоги, указанные в командной строке, я не считаю, что он принимает какие-либо данные от stdin. Перенаправление > >> и < - это способы использования файла для ввода и сбора вывода.

ответил rhubarbdog 17 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowWed, 17 Sep 2014 22:57:07 +0400 2014, 22:57:07

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132