Я пытаюсь понять именованные каналы в контексте этого конкретного примера.
Я печатаю <(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 <()
он перечисляет мне содержимое каталога.
Что происходит в случае именованной трубы?
mkfifo
создает только именованный канал без содержимого. Так что вам нужно написать это самостоятельно (напримерmkfifo mypipe; ls > mypipe
). И да, записи в канал будут блокироваться до тех пор, пока какой-либо процесс не выполнит чтение из канала.