私がこれを行うとき:
sudo wpa_supplicant -D nl80211,wext -i wlp4s0 -c <(wpa_passphrase "some ssid" "password")
わかりました。
Successfully initialized wpa_supplicant
Failed to open config file '/dev/fd/63', error: No such file or directory
Failed to read or parse configuration '/dev/fd/63'
どんなアイデアがありますか?
ベストアンサー1
プロセスの置き換え <(…)
パイプを持つファイル記述子と同じパスを持つパイプを作成し、/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 …)
またはstdinを使用しないので、そこにデータを渡します。
wpa_passphrase … | sudo wpa_supplicant … -c /dev/stdin
または、sudoでシェルを実行し、そこにプロセス置換を入れます。コマンドに特殊文字が含まれている場合は、引用に注意してください。
sudo bash -c 'wpa_supplication … -c <(wpa_passphrase …)'