การทดแทนโปรเซส <(…)
สร้างไพพ์ใช้/dev/fd
ในการกำหนดพา ธ ที่เทียบเท่ากับ file descriptor ที่ไพพ์อยู่และส่งชื่อไฟล์เป็นอาร์กิวเมนต์ไปยังโปรแกรม นี่คือโปรแกรมsudo
และมันจะส่งผ่านอาร์กิวเมนต์นั้น (ซึ่งเป็นเพียงสตริงเท่าที่เกี่ยวข้อง) ไปยังwpa_supplicant
ซึ่งถือว่าเป็นชื่อไฟล์
ปัญหาคือ sudo ปิดไฟล์ descriptors ทั้งหมดยกเว้นตัวมาตรฐาน (stdin = 0, stdout = 1 และ stderr = 2) ไปป์ของการทดแทนกระบวนการอยู่บน descriptor อื่นซึ่งถูกปิดดังนั้นเมื่อwpa_supplicant
พยายามเปิดมันจะพบไฟล์ที่ไม่มีอยู่
หากนโยบาย sudo ของคุณอนุญาต ( closefrom_override
เปิดใช้งานตัวเลือก) คุณสามารถบอกได้ว่าจะไม่ปิดตัวให้คำอธิบายไฟล์ แต่นี่ไม่ใช่กรณี
sudo -C 64 wpa_supplicant … -c <(wpa_passphrase …)
อีกทางหนึ่งเนื่องจากคุณไม่ได้ใช้อินพุตมาตรฐานให้ส่งผ่านข้อมูลที่นั่น
wpa_passphrase … | sudo wpa_supplicant … -c /dev/stdin
หรือเรียกใช้เชลล์จาก sudo และวางการทดแทนกระบวนการไว้ที่นั่น ใช้ความระมัดระวังถ้าคำสั่งมีอักขระพิเศษ
sudo bash -c 'wpa_supplication … -c <(wpa_passphrase …)'