Tôi đang cố gắng để hiểu các đường ống được đặt tên trong bối cảnh của ví dụ cụ thể này.
Tôi gõ <(ls -l)
vào terminal của tôi và nhận đầu ra là bash: /dev/fd/63: Permission denied
.
Nếu tôi gõ cat <(ls -l)
, tôi có thể thấy nội dung thư mục. Nếu tôi thay thế cat
bằng echo
, tôi nghĩ rằng tôi nhận được tên thiết bị đầu cuối (hoặc là nó?).
echo <(ls -l)
cho đầu ra như /dev/fd/63
.
Ngoài ra, ví dụ đầu ra này không rõ ràng với tôi.
ls -l <(echo "Whatever")
lr-x------ 1 root root 64 Sep 17 13:18 /dev/fd/63 -> pipe:[48078752]
Tuy nhiên, nếu tôi đưa ra, ls -l <()
nó liệt kê cho tôi nội dung thư mục.
Điều gì đang xảy ra trong trường hợp của đường ống được đặt tên?
mkfifo
chỉ tạo ra các ống được đặt tên, không có bất kỳ nội dung. Vì vậy, bạn cần phải viết cho chính mình (ví dụmkfifo mypipe; ls > mypipe
). Và có, ghi vào đường ống sẽ chặn cho đến khi một số quá trình đọc từ đường ống.