ฉันพยายามเข้าใจไพพ์ที่มีชื่อในบริบทของตัวอย่างเฉพาะนี้
ฉันพิมพ์<(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
) และใช่การเขียนไปที่ไพพ์จะปิดกั้นจนกว่ากระบวนการบางอย่างจะอ่านจากไพพ์