답변:
ArchLinux 위키 인용하기 :
참고 : 프로세스 대체로 인해 sudo를 사용하여이 명령을 실행할 수 없습니다. 루트 쉘이 필요합니다.
당신은 사용할 수 있어야 su -c
에서 sudo
이렇게 같은 :
$ sudo su -c 'wpa_supplicant -D nl80211,wext -i wlp4s0 -c \
<(wpa_passphrase "some ssid" "password")'
프로세스 대체 <(…)
는 파이프를 작성하고 파이프 /dev/fd
가있는 파일 디스크립터와 동등한 경로를 제공하는 데 사용 하며 파일 이름을 프로그램의 인수로 전달합니다. 여기에서 프로그램은이며 sudo
, 해당 인수 (관련된 문자열 만 해당)를 wpa_supplicant
파일 이름으로 처리 하는 인수로 전달합니다 .
문제는 sudo가 표준 파일 디스크립터 (stdin = 0, stdout = 1 및 stderr = 2)를 제외한 모든 파일 디스크립터를 닫는다는 것입니다. 프로세스 대체 파이프는 다른 디스크립터에 있으며 닫히므로 wpa_supplicant
열려고 시도하면 존재하지 않는 파일을 찾습니다.
sudo 정책에서 허용하는 경우 ( closefrom_override
옵션 사용) 파일 설명자를 닫지 않도록 지시 할 수 있습니다. 그러나 이것은 보통 그렇지 않습니다.
sudo -C 64 wpa_supplicant … -c <(wpa_passphrase …)
또는 표준 입력을 사용하지 않으므로 데이터를 전달하십시오.
wpa_passphrase … | sudo wpa_supplicant … -c /dev/stdin
또는 sudo에서 쉘을 실행하고 프로세스 대체를 넣습니다. 명령에 특수 문자가 포함되어 있으면 인용 부호를주의하십시오.
sudo bash -c 'wpa_supplication … -c <(wpa_passphrase …)'
웹 검색 엔진에서 온 사용자의 경우 : /dev
마운트되어 있는지 확인하십시오 . chroot 할 때 쉽게 실수 할 수 있습니다. 그러면 이와 같은 오류가 발생할 수 있습니다.