Durch die Prozessersetzung <(…) wird eine Pipe erstellt, /dev/fdein Pfad angegeben, der dem Dateideskriptor entspricht, in dem sich die Pipe befindet, und der Dateiname als Argument an das Programm übergeben. Hier ist das Programm sudo, und es übergibt dieses Argument (das für ihn nur eine Zeichenfolge ist) an wpa_supplicant, das es als Dateinamen behandelt.
Das Problem ist, dass sudo alle Dateideskriptoren außer den Standarddeskriptoren schließt (stdin = 0, stdout = 1 und stderr = 2). Die Pipe der Prozessersetzung befindet sich in einem anderen Deskriptor, der geschlossen wird. Wenn Sie also wpa_supplicantversuchen, ihn zu öffnen, wird eine Datei gefunden, die nicht vorhanden ist.
Wenn Ihre Sudo-Richtlinie dies zulässt ( closefrom_overrideOption aktiviert), können Sie festlegen, dass Dateideskriptoren nicht geschlossen werden sollen. Dies ist jedoch normalerweise nicht der Fall.
sudo -C 64 wpa_supplicant … -c <(wpa_passphrase …)
Alternativ können Sie die Daten dort übergeben, da Sie keine Standardeingabe verwenden.
wpa_passphrase … | sudo wpa_supplicant … -c /dev/stdin
Alternativ können Sie eine Shell von sudo ausführen und die Prozessersetzung dort ablegen. Achten Sie beim Zitieren darauf, ob der Befehl Sonderzeichen enthält.
sudo bash -c 'wpa_supplication … -c <(wpa_passphrase …)'