回答:
注:プロセス置換のため、このコマンドを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するときに簡単に間違えると、このようなエラーが発生します。