La sustitución del proceso <(…)
crea una tubería, se usa /dev/fd
para 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_supplicant
intenta abrirlo, encuentra un archivo que no existe.
Si su política de sudo lo permite ( closefrom_override
opció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