我试图在此特定示例的上下文中了解命名管道。
我输入<(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
)。是的,对管道的写入将阻塞,直到从管道读取某些进程为止。