Substitusi proses <(…) membuat pipa, digunakan /dev/fduntuk memberikan jalur yang setara dengan deskriptor file tempat pipa berada, dan meneruskan nama file sebagai argumen ke program. Di sini programnya sudo, dan ia melewati argumen itu (yang hanya berupa string, sejauh menyangkut) wpa_supplicant, yang memperlakukannya sebagai nama file.
Masalahnya adalah sudo menutup semua file deskriptor kecuali yang standar (stdin = 0, stdout = 1 dan stderr = 2). Pipa substitusi proses ada di deskriptor lain, yang ditutup, jadi ketika wpa_supplicantmencoba membukanya, ia menemukan file yang tidak ada.
Jika kebijakan sudo Anda membolehkannya ( closefrom_overrideopsi diaktifkan), Anda dapat mengatakannya untuk tidak menutup file deskriptor. Tapi ini biasanya tidak demikian.
sudo -C 64 wpa_supplicant … -c <(wpa_passphrase …)
Atau, karena Anda tidak menggunakan input standar, sampaikan data di sana.
wpa_passphrase … | sudo wpa_supplicant … -c /dev/stdin
Atau, jalankan shell dari sudo dan letakkan proses substitusi di sana. Berhati-hatilah dengan mengutip jika perintah berisi karakter khusus.
sudo bash -c 'wpa_supplication … -c <(wpa_passphrase …)'