La sustitución del proceso <(…) crea una tubería, se usa /dev/fdpara dar una ruta que es equivalente al descriptor de archivo donde está la tubería, y pasa el nombre del archivo como argumento al programa. Aquí el programa es sudo, y pasa ese argumento (que es solo una cadena, en lo que a él respecta) wpa_supplicant, que lo trata como un nombre de archivo.
El problema es que sudo cierra todos los descriptores de archivos, excepto los estándar (stdin = 0, stdout = 1 y stderr = 2). La canalización de la sustitución del proceso está en otro descriptor, que se cierra, por lo que cuando wpa_supplicantintenta abrirlo, encuentra un archivo que no existe.
Si su política de sudo lo permite ( closefrom_overrideopción habilitada), puede indicarle que no cierre los descriptores de archivo. Pero este no suele ser el caso.
sudo -C 64 wpa_supplicant … -c <(wpa_passphrase …)
Alternativamente, como no está utilizando una entrada estándar, pase los datos allí.
wpa_passphrase … | sudo wpa_supplicant … -c /dev/stdin
Alternativamente, ejecute un shell desde sudo y coloque la sustitución del proceso allí. Tenga cuidado con las citas si el comando contiene caracteres especiales.
sudo bash -c 'wpa_supplication … -c <(wpa_passphrase …)'
Gilles 'SO- deja de ser malvado'
fuente