Substitusi proses <(…)
membuat pipa, digunakan /dev/fd
untuk 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_supplicant
mencoba membukanya, ia menemukan file yang tidak ada.
Jika kebijakan sudo Anda membolehkannya ( closefrom_override
opsi 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 …)'
Gilles 'SANGAT berhenti menjadi jahat'
sumber