La substitution de processus <(…) crée un canal, utilise /dev/fdpour donner un chemin équivalent au descripteur de fichier où se trouve le canal et transmet le nom du fichier comme argument au programme. Ici, le programme est sudo, et il passe cet argument (qui n'est qu'une chaîne, en ce qui le concerne) à wpa_supplicant, qui le traite comme un nom de fichier.
Le problème est que sudo ferme tous les descripteurs de fichiers à l'exception des descripteurs standard (stdin = 0, stdout = 1 et stderr = 2). Le canal de la substitution de processus se trouve sur un autre descripteur, qui se ferme, donc quand il wpa_supplicantessaie de l'ouvrir, il trouve un fichier qui n'existe pas.
Si votre stratégie sudo le permet ( closefrom_overrideoption activée), vous pouvez lui dire de ne pas fermer les descripteurs de fichiers. Mais ce n'est généralement pas le cas.
sudo -C 64 wpa_supplicant … -c <(wpa_passphrase …)
Alternativement, puisque vous n'utilisez pas d'entrée standard, passez-y les données.
wpa_passphrase … | sudo wpa_supplicant … -c /dev/stdin
Vous pouvez également exécuter un shell à partir de sudo et y placer la substitution de processus. Soyez prudent en citant si la commande contient des caractères spéciaux.
sudo bash -c 'wpa_supplication … -c <(wpa_passphrase …)'