La sostituzione del processo <(…)
crea una pipe, utilizza /dev/fd
per fornire un percorso equivalente al descrittore di file in cui si trova la pipe e passa il nome del file come argomento al programma. Qui il programma è sudo
, e passa quell'argomento (che è solo una stringa, per quanto riguarda) wpa_supplicant
, che lo tratta come un nome di file.
Il problema è che sudo chiude tutti i descrittori di file tranne quelli standard (stdin = 0, stdout = 1 e stderr = 2). La pipe della sostituzione del processo si trova su un altro descrittore, che viene chiuso, quindi quando wpa_supplicant
tenta di aprirlo, trova un file che non esiste.
Se la tua politica sudo lo consente ( closefrom_override
opzione abilitata), puoi dirgli di non chiudere i descrittori di file. Ma di solito non è così.
sudo -C 64 wpa_supplicant … -c <(wpa_passphrase …)
In alternativa, poiché non si utilizza l'input standard, passare i dati lì.
wpa_passphrase … | sudo wpa_supplicant … -c /dev/stdin
In alternativa, eseguire una shell da sudo e inserire lì la sostituzione del processo. Fai attenzione quando apri il comando se il comando contiene caratteri speciali.
sudo bash -c 'wpa_supplication … -c <(wpa_passphrase …)'